1 /** 2 * EMSA1 BSI Variant 3 * 4 * Copyright: 5 * (C) 1999-2008 Jack Lloyd 6 * (C) 2014-2015 Etienne Cimon 7 * 2007 FlexSecure GmbH 8 * 9 * License: 10 * Botan is released under the Simplified BSD License (see LICENSE.md) 11 */ 12 module botan.pk_pad.emsa1_bsi; 13 14 import botan.constants; 15 static if (BOTAN_HAS_EMSA1_BSI): 16 import botan.pk_pad.emsa1; 17 import botan.hash.hash; 18 import botan.utils.types; 19 20 /** 21 * EMSA1_BSI is a variant of EMSA1 specified by the BSI. It accepts 22 * only hash values which are less or equal than the maximum key 23 * length. The implementation comes from InSiTo 24 */ 25 final class EMSA1BSI : EMSA1, EMSA 26 { 27 public: 28 /** 29 * Params: 30 * hash = the hash object to use 31 */ 32 this(HashFunction hash) 33 { 34 super(hash); 35 } 36 37 /* 38 * EMSA1 BSI Encode Operation 39 */ 40 override SecureVector!ubyte encodingOf(const ref SecureVector!ubyte msg, 41 size_t output_bits, 42 RandomNumberGenerator rng) 43 { 44 //logDebug("EMSA1BSI Encode"); 45 if (msg.length != hashOutputLength()) 46 throw new EncodingError("EMSA1_BSI::encodingOf: Invalid size for input"); 47 48 if (8*msg.length <= output_bits) 49 return msg.dup; 50 51 throw new EncodingError("EMSA1_BSI::encodingOf: max key input size exceeded"); 52 } 53 54 // Interface fallthrough 55 override SecureVector!ubyte rawData() { return super.rawData(); } 56 override bool verify(const ref SecureVector!ubyte coded, 57 const ref SecureVector!ubyte raw, size_t key_bits) 58 { 59 return super.verify(coded, raw, key_bits); 60 } 61 override void update(const(ubyte)* input, size_t length) 62 { 63 super.update(input, length); 64 } 65 } 66