@@ -1265,23 +1265,39 @@ module JCAModel {
12651265 override int getFixedDigestLength ( ) { exists ( hash_name_to_type_known ( hashName , result ) ) }
12661266 }
12671267
1268- //TODO: handle PBE
1269- class Pbkdf2AlgorithmStringLiteral extends KdfAlgorithmStringLiteral ,
1270- Crypto:: Pbkdf2AlgorithmInstance , Crypto:: HmacAlgorithmInstance
1268+ //TODO: handle PBE "with" cases
1269+ class Pbkdf2WithHmac_Pbkdf2AlgorithmInstance extends Crypto:: Pbkdf2AlgorithmInstance ,
1270+ KdfAlgorithmStringLiteral , // this is a parent already, but extending to have immediate access to 'getConsumer()'
1271+ Pbkdf2WithHmac_KeyOperationAlgorithmStringLiteral
12711272 {
1272- Pbkdf2AlgorithmStringLiteral ( ) { super .getKdfType ( ) instanceof Crypto:: PBKDF2 }
1273-
1274- override Crypto:: AlgorithmValueConsumer getHmacAlgorithmValueConsumer ( ) { result = this }
1273+ override Crypto:: AlgorithmValueConsumer getHmacAlgorithmValueConsumer ( ) {
1274+ result = this .getConsumer ( )
1275+ }
1276+ }
12751277
1276- override Crypto:: AlgorithmValueConsumer getHashAlgorithmValueConsumer ( ) { result = this }
1278+ // NOTE: must use instanceof to avoid non-monotonic recursion
1279+ class Pbkdf2WithHmac_HmacAlgorithmInstance extends Crypto:: HmacAlgorithmInstance instanceof Pbkdf2WithHmac_KeyOperationAlgorithmStringLiteral
1280+ {
1281+ override Crypto:: AlgorithmValueConsumer getHashAlgorithmValueConsumer ( ) {
1282+ result = this .( KdfAlgorithmStringLiteral ) .getConsumer ( )
1283+ }
12771284
1278- override int getKeySizeFixed ( ) { none ( ) }
1285+ override int getKeySizeFixed ( ) {
1286+ // already defined by parent key operation algorithm, but extending an instance
1287+ // still requires we override this method
1288+ result = super .getKeySizeFixed ( )
1289+ }
12791290
1280- override Crypto:: ConsumerInputDataFlowNode getKeySizeConsumer ( ) { none ( ) }
1291+ override Crypto:: ConsumerInputDataFlowNode getKeySizeConsumer ( ) {
1292+ // already defined by parent key operation algorithm, but extending an instance
1293+ // still requires we override this method
1294+ result = super .getKeySizeConsumer ( )
1295+ }
12811296
12821297 override string getRawAlgorithmName ( ) {
1283- // Note: hard coding "hmac" since that should be the only option
1284- result = "Hmac"
1298+ // already defined by parent key operation algorithm, but extending an instance
1299+ // still requires we override this method
1300+ result = super .getRawAlgorithmName ( )
12851301 }
12861302
12871303 override Crypto:: KeyOpAlg:: AlgorithmType getAlgorithmType ( ) {
0 commit comments