diff --git a/modules/serialize/src/serialize_factory.ts b/modules/serialize/src/serialize_factory.ts index 3c61c8f97..c57daeb47 100644 --- a/modules/serialize/src/serialize_factory.ts +++ b/modules/serialize/src/serialize_factory.ts @@ -43,7 +43,10 @@ export function serializeFactory (fromUtf8: (input: any) => Uint8Array) { } function frameIv (ivLength: IvLength, sequenceNumber: number) { - /* Precondition: sequenceNumber must conform to the specification. i.e. 0 - (2^32 - 1) */ + /* Precondition: sequenceNumber must conform to the specification. i.e. 1 - (2^32 - 1) + * The sequence number starts at 1 + * https://github.com/awslabs/aws-encryption-sdk-specification/blob/master/data-format/message-body.md#sequence-number + */ needs(sequenceNumber > 0 && SequenceIdentifier.SEQUENCE_NUMBER_END >= sequenceNumber, 'sequenceNumber out of bounds') const buff = new Uint8Array(ivLength) diff --git a/modules/serialize/test/serialize_factory.test.ts b/modules/serialize/test/serialize_factory.test.ts index 8ff67b956..98e686c8a 100644 --- a/modules/serialize/test/serialize_factory.test.ts +++ b/modules/serialize/test/serialize_factory.test.ts @@ -30,7 +30,7 @@ describe('serializeFactory:frameIv', () => { expect(test).to.deep.equal(fixtures.basicFrameIV()) }) - it('Precondition: sequenceNumber must conform to the specification. i.e. 0 - (2^32 - 1)', () => { + it('Precondition: sequenceNumber must conform to the specification. i.e. 1 - (2^32 - 1)', () => { const fromUtf8 = () => { throw new Error('not used') } const { frameIv } = serializeFactory(fromUtf8) expect(() => frameIv(12, 0)).to.throw()