Passed
Push — main ( 7d04df...f2cd2d )
by Yuri
01:12 queued 13s
created

verifications.ts ➔ verifyFieldSchema   A

Complexity

Conditions 2

Size

Total Lines 9
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2.032

Importance

Changes 0
Metric Value
eloc 8
dl 0
loc 9
ccs 4
cts 5
cp 0.8
rs 10
c 0
b 0
f 0
cc 2
crap 2.032
1 1
import { Any, Constructed, Integer, ObjectIdentifier, OctetString, Sequence, Set, verifySchema } from 'asn1js'
2
3 1
import { CONTENT_ID, FIELD_TYPE_ID, FIELD_VALUE_ID } from './constants'
4
5 1
const receiptSchema = new Sequence({
6
  value: [
7
    new ObjectIdentifier(),
8
    new Constructed({
9
      idBlock: { tagClass: 3, tagNumber: 0 },
10
      value: [
11
        new Sequence({
12
          value: [
13
            new Integer(),
14
            new Set({
15
              value: [
16
                new Sequence({
17
                  value: [new ObjectIdentifier(), new Any()],
18
                }),
19
              ],
20
            }),
21
            new Sequence({
22
              value: [
23
                new ObjectIdentifier(),
24
                new Constructed({
25
                  idBlock: { tagClass: 3, tagNumber: 0 },
26
                  value: [new OctetString({ name: CONTENT_ID })],
27
                }),
28
              ],
29
            }),
30
          ],
31
        }),
32
      ],
33
    }),
34
  ],
35
})
36
37 1
const fieldSchema = new Sequence({
38
  value: [
39
    new Integer({ name: FIELD_TYPE_ID }),
40
    new Integer(),
41
    new OctetString({ name: FIELD_VALUE_ID })
42
  ],
43
})
44
45 1
export function verifyReceiptSchema (receipt: string) {
46 2
  const receiptVerification = verifySchema(Buffer.from(receipt, 'base64'), receiptSchema)
47 2
  if (!receiptVerification.verified) {
48 1
    throw new Error('Receipt verification failed.')
49
  }
50
51 1
  return receiptVerification
52
}
53
54 1
export function verifyFieldSchema (sequence: Sequence) {
55 154
  const fieldVerification = verifySchema(sequence.toBER(), fieldSchema)
56 154
  if (!fieldVerification.verified) {
57
    // Return null if the field schema verification fails, so we can skip the field
58
    return null
59
  }
60
61 154
  return fieldVerification
62
}
63