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

src/verifications.ts   A

Complexity

Total Complexity 4
Complexity/F 2

Size

Lines of Code 63
Function Count 2

Duplication

Duplicated Lines 0
Ratio 0 %

Test Coverage

Coverage 92.86%

Importance

Changes 0
Metric Value
wmc 4
eloc 44
mnd 2
bc 2
fnc 2
dl 0
loc 63
ccs 13
cts 14
cp 0.9286
rs 10
bpm 1
cpm 2
noi 0
c 0
b 0
f 0

2 Functions

Rating   Name   Duplication   Size   Complexity  
A verifications.ts ➔ verifyReceiptSchema 0 8 2
A verifications.ts ➔ verifyFieldSchema 0 9 2
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