@@ -19,10 +19,9 @@ import { Transform } from 'stream' // eslint-disable-line no-unused-vars
19
19
import {
20
20
NodeAlgorithmSuite ,
21
21
NodeMaterialsManager , // eslint-disable-line no-unused-vars
22
- getDecryptionHelper ,
23
- needs
22
+ getDecryptionHelper
24
23
} from '@aws-crypto/material-management-node'
25
- import { deserializeFactory , kdfInfo , ContentType } from '@aws-crypto/serialize'
24
+ import { deserializeFactory , kdfInfo } from '@aws-crypto/serialize'
26
25
import { VerifyInfo } from './verify_stream' // eslint-disable-line no-unused-vars
27
26
28
27
const toUtf8 = ( input : Uint8Array ) => Buffer
@@ -35,20 +34,12 @@ interface HeaderState {
35
34
buffer : Buffer
36
35
}
37
36
38
- export interface ParseHeaderOptions {
39
- maxBodySize ?: number
40
- }
41
-
42
37
export class ParseHeaderStream extends PortableTransformWithType {
43
38
private materialsManager ! : NodeMaterialsManager
44
39
private _headerState : HeaderState
45
- private _maxBodySize ?: number
46
- constructor ( cmm : NodeMaterialsManager , { maxBodySize } : ParseHeaderOptions = { } ) {
47
- /* Precondition: ParseHeaderStream requires maxBodySize must be falsey or a number. */
48
- needs ( ! maxBodySize || typeof maxBodySize === 'number' , 'Unsupported MaxBodySize.' )
40
+ constructor ( cmm : NodeMaterialsManager ) {
49
41
super ( )
50
42
Object . defineProperty ( this , 'materialsManager' , { value : cmm , enumerable : true } )
51
- Object . defineProperty ( this , '_maxBodySize' , { value : maxBodySize , enumerable : true } )
52
43
this . _headerState = {
53
44
buffer : Buffer . alloc ( 0 )
54
45
}
@@ -67,22 +58,7 @@ export class ParseHeaderStream extends PortableTransformWithType {
67
58
const { rawHeader, headerIv, headerAuthTag } = headerInfo
68
59
69
60
const suite = new NodeAlgorithmSuite ( algorithmSuite . id )
70
- const { encryptionContext, encryptedDataKeys, contentType, frameLength } = messageHeader
71
-
72
- /* Framed messages store the frame size in the header.
73
- * It is easy to confirm here.
74
- * For non-framed messages, the size is in the body header.
75
- * The check in verify stream _should_ be adequate from a logical perspective.
76
- * However, doing this check here allows framed messages to exit before the CMM is called.
77
- * This means that decryption of the Encrypted Data Key is never even attempted.
78
- */
79
- if ( contentType === ContentType . FRAMED_DATA ) {
80
- /* Precondition: If maxBodySize was set I can not buffer a frame more data than maxBodySize.
81
- * Before returning *any* cleartext, the stream **MUST** verify the decryption.
82
- * This means that I must buffer the message until the AuthTag is reached.
83
- */
84
- needs ( ! this . _maxBodySize || this . _maxBodySize >= frameLength , 'maxBodySize exceeded.' )
85
- }
61
+ const { encryptionContext, encryptedDataKeys } = messageHeader
86
62
87
63
this . materialsManager
88
64
. decryptMaterials ( { suite, encryptionContext, encryptedDataKeys } )
0 commit comments