1 /** 2 * EMSA Classes 3 * 4 * Copyright: 5 * (C) 1999-2007 Jack Lloyd 6 * (C) 2014-2015 Etienne Cimon 7 * 8 * License: 9 * Botan is released under the Simplified BSD License (see LICENSE.md) 10 */ 11 module botan.pk_pad.emsa; 12 13 import memutils.vector; 14 public import botan.rng.rng; 15 /** 16 * Encoding Method for Signatures, Appendix 17 */ 18 interface EMSA 19 { 20 public: 21 /** 22 * Add more data to the signature computation 23 * Params: 24 * input = some data 25 * length = length of input in bytes 26 */ 27 abstract void update(const(ubyte)* input, size_t length); 28 29 /** 30 * Returns: raw hash 31 */ 32 abstract SecureVector!ubyte rawData(); 33 34 /** 35 * Return the encoding of a message 36 * Params: 37 * msg = the result of rawData() 38 * output_bits = the desired output bit size 39 * rng = a random number generator 40 * Returns: encoded signature 41 */ 42 abstract SecureVector!ubyte encodingOf(const ref SecureVector!ubyte msg, 43 size_t output_bits, 44 RandomNumberGenerator rng); 45 46 /// ditto 47 final SecureVector!ubyte encodingOf(const SecureVector!ubyte msg, 48 size_t output_bits, 49 RandomNumberGenerator rng) 50 { 51 return encodingOf(msg, output_bits, rng); 52 } 53 54 /** 55 * Verify the encoding 56 * Params: 57 * coded = the received (coded) message representative 58 * raw = the computed (local, uncoded) message representative 59 * key_bits = the size of the key in bits 60 * Returns: true if coded is a valid encoding of raw, otherwise false 61 */ 62 abstract bool verify(const ref SecureVector!ubyte coded, 63 const ref SecureVector!ubyte raw, 64 size_t key_bits); 65 }