| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654 |
- { *********************************************************************************** }
- { * CryptoLib Library * }
- { * Copyright (c) 2018 Ugochukwu Mmaduekwe * }
- { * Github Repository <https://github.com/Xor-el> * }
- { * Distributed under the MIT software license, see the accompanying file LICENSE * }
- { * or visit http://www.opensource.org/licenses/mit-license.php. * }
- { * Acknowledgements: * }
- { * * }
- { * Thanks to Sphere 10 Software (http://sphere10.com) for sponsoring * }
- { * the development of this library * }
- { * ******************************************************************************* * }
- (* &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& *)
- unit ClpSignerUtilities;
- {$I ..\Include\CryptoLib.inc}
- interface
- uses
- SysUtils,
- Generics.Collections,
- ClpCryptoLibTypes,
- HlpHashFactory,
- HlpIHash,
- ClpDsaDigestSigner,
- ClpECSchnorrSigner,
- ClpX9ObjectIdentifiers,
- ClpTeleTrusTObjectIdentifiers,
- ClpCryptoProObjectIdentifiers,
- ClpECDsaSigner,
- ClpIECDsaSigner,
- ClpISigner,
- ClpIDerObjectIdentifier;
- resourcestring
- SMechanismNil = 'Mechanism';
- SAlgorithmNil = 'Algorithm';
- SUnRecognizedAlgorithm = 'Signer " %s " not recognised.';
- type
- /// <summary>
- /// Signer Utility class contains methods that can not be specifically
- /// grouped into other classes.
- /// </summary>
- TSignerUtilities = class sealed(TObject)
- strict private
- class var
- Falgorithms: TDictionary<String, String>;
- Foids: TDictionary<String, IDerObjectIdentifier>;
- class function GetAlgorithms: TCryptoLibStringArray; static; inline;
- class constructor CreateSignerUtilities();
- class destructor DestroySignerUtilities();
- public
- /// <summary>
- /// Returns an ObjectIdentifier for a given encoding.
- /// </summary>
- /// <param name="mechanism">A string representation of the encoding.</param>
- /// <returns>A DerObjectIdentifier, null if the OID is not available.</returns>
- // TODO Don't really want to support this
- class function GetObjectIdentifier(mechanism: String): IDerObjectIdentifier;
- static; inline;
- class function GetEncodingName(const oid: IDerObjectIdentifier): String;
- static; inline;
- class function GetSigner(const id: IDerObjectIdentifier): ISigner; overload;
- static; inline;
- class function GetSigner(algorithm: String): ISigner; overload; static;
- class property Algorithms: TCryptoLibStringArray read GetAlgorithms;
- end;
- implementation
- { TSignerUtilities }
- class constructor TSignerUtilities.CreateSignerUtilities;
- begin
- Falgorithms := TDictionary<String, String>.Create();
- Foids := TDictionary<String, IDerObjectIdentifier>.Create();
- TX9ObjectIdentifiers.Boot;
- TTeleTrusTObjectIdentifiers.Boot;
- TCryptoProObjectIdentifiers.Boot;
- Falgorithms.Add('NONEWITHECDSA', 'NONEwithECDSA');
- Falgorithms.Add('ECDSAWITHNONE', 'NONEwithECDSA');
- Falgorithms.Add('ECDSA', 'SHA-1withECDSA');
- Falgorithms.Add('SHA1/ECDSA', 'SHA-1withECDSA');
- Falgorithms.Add('SHA-1/ECDSA', 'SHA-1withECDSA');
- Falgorithms.Add('ECDSAWITHSHA1', 'SHA-1withECDSA');
- Falgorithms.Add('ECDSAWITHSHA-1', 'SHA-1withECDSA');
- Falgorithms.Add('SHA1WITHECDSA', 'SHA-1withECDSA');
- Falgorithms.Add('SHA-1WITHECDSA', 'SHA-1withECDSA');
- Falgorithms.Add(TX9ObjectIdentifiers.ECDsaWithSha1.id, 'SHA-1withECDSA');
- Falgorithms.Add(TTeleTrusTObjectIdentifiers.ECSignWithSha1.id,
- 'SHA-1withECDSA');
- Falgorithms.Add('SHA224/ECDSA', 'SHA-224withECDSA');
- Falgorithms.Add('SHA-224/ECDSA', 'SHA-224withECDSA');
- Falgorithms.Add('ECDSAWITHSHA224', 'SHA-224withECDSA');
- Falgorithms.Add('ECDSAWITHSHA-224', 'SHA-224withECDSA');
- Falgorithms.Add('SHA224WITHECDSA', 'SHA-224withECDSA');
- Falgorithms.Add('SHA-224WITHECDSA', 'SHA-224withECDSA');
- Falgorithms.Add(TX9ObjectIdentifiers.ECDsaWithSha224.id, 'SHA-224withECDSA');
- Falgorithms.Add('SHA256/ECDSA', 'SHA-256withECDSA');
- Falgorithms.Add('SHA-256/ECDSA', 'SHA-256withECDSA');
- Falgorithms.Add('ECDSAWITHSHA256', 'SHA-256withECDSA');
- Falgorithms.Add('ECDSAWITHSHA-256', 'SHA-256withECDSA');
- Falgorithms.Add('SHA256WITHECDSA', 'SHA-256withECDSA');
- Falgorithms.Add('SHA-256WITHECDSA', 'SHA-256withECDSA');
- Falgorithms.Add(TX9ObjectIdentifiers.ECDsaWithSha256.id, 'SHA-256withECDSA');
- Falgorithms.Add('SHA384/ECDSA', 'SHA-384withECDSA');
- Falgorithms.Add('SHA-384/ECDSA', 'SHA-384withECDSA');
- Falgorithms.Add('ECDSAWITHSHA384', 'SHA-384withECDSA');
- Falgorithms.Add('ECDSAWITHSHA-384', 'SHA-384withECDSA');
- Falgorithms.Add('SHA384WITHECDSA', 'SHA-384withECDSA');
- Falgorithms.Add('SHA-384WITHECDSA', 'SHA-384withECDSA');
- Falgorithms.Add(TX9ObjectIdentifiers.ECDsaWithSha384.id, 'SHA-384withECDSA');
- Falgorithms.Add('SHA512/ECDSA', 'SHA-512withECDSA');
- Falgorithms.Add('SHA-512/ECDSA', 'SHA-512withECDSA');
- Falgorithms.Add('ECDSAWITHSHA512', 'SHA-512withECDSA');
- Falgorithms.Add('ECDSAWITHSHA-512', 'SHA-512withECDSA');
- Falgorithms.Add('SHA512WITHECDSA', 'SHA-512withECDSA');
- Falgorithms.Add('SHA-512WITHECDSA', 'SHA-512withECDSA');
- Falgorithms.Add(TX9ObjectIdentifiers.ECDsaWithSha512.id, 'SHA-512withECDSA');
- Falgorithms.Add('RIPEMD160/ECDSA', 'RIPEMD160withECDSA');
- Falgorithms.Add('ECDSAWITHRIPEMD160', 'RIPEMD160withECDSA');
- Falgorithms.Add('RIPEMD160WITHECDSA', 'RIPEMD160withECDSA');
- Falgorithms.Add(TTeleTrusTObjectIdentifiers.ECSignWithRipeMD160.id,
- 'RIPEMD160withECDSA');
- // Falgorithms.Add('GOST-3410', 'GOST3410');
- // Falgorithms.Add('GOST-3410-94', 'GOST3410');
- // Falgorithms.Add('GOST3411WITHGOST3410', 'GOST3410');
- // Falgorithms.Add(TCryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94.id,
- // 'GOST3410');
- // Falgorithms.Add('ECGOST-3410', 'ECGOST3410');
- // Falgorithms.Add('ECGOST-3410-2001', 'ECGOST3410');
- // Falgorithms.Add('GOST3411WITHECGOST3410', 'ECGOST3410');
- // Falgorithms.Add(TCryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001.id,
- // 'ECGOST3410');
- Foids.Add('SHA-1withECDSA', TX9ObjectIdentifiers.ECDsaWithSha1);
- Foids.Add('SHA-224withECDSA', TX9ObjectIdentifiers.ECDsaWithSha224);
- Foids.Add('SHA-256withECDSA', TX9ObjectIdentifiers.ECDsaWithSha256);
- Foids.Add('SHA-384withECDSA', TX9ObjectIdentifiers.ECDsaWithSha384);
- Foids.Add('SHA-512withECDSA', TX9ObjectIdentifiers.ECDsaWithSha512);
- // Foids.Add('GOST3410',
- // TCryptoProObjectIdentifiers.GostR3411x94WithGostR3410x94);
- //
- // Foids.Add('ECGOST3410',
- // TCryptoProObjectIdentifiers.GostR3411x94WithGostR3410x2001);
- // ECSCHNORR BSI
- Falgorithms.Add('SHA1/ECSCHNORR/BSI', 'SHA-1withECSCHNORRBSI');
- Falgorithms.Add('SHA-1/ECSCHNORR/BSI', 'SHA-1withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA1', 'SHA-1withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA-1', 'SHA-1withECSCHNORRBSI');
- Falgorithms.Add('SHA1WITHECSCHNORRBSI', 'SHA-1withECSCHNORRBSI');
- Falgorithms.Add('SHA-1WITHECSCHNORRBSI', 'SHA-1withECSCHNORRBSI');
- Falgorithms.Add('SHA224/ECSCHNORR/BSI', 'SHA-224withECSCHNORRBSI');
- Falgorithms.Add('SHA-224/ECSCHNORR/BSI', 'SHA-224withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA224', 'SHA-224withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA-224', 'SHA-224withECSCHNORRBSI');
- Falgorithms.Add('SHA224WITHECSCHNORRBSI', 'SHA-224withECSCHNORRBSI');
- Falgorithms.Add('SHA-224WITHECSCHNORRBSI', 'SHA-224withECSCHNORRBSI');
- Falgorithms.Add('SHA256/ECSCHNORR/BSI', 'SHA-256withECSCHNORRBSI');
- Falgorithms.Add('SHA-256/ECSCHNORR/BSI', 'SHA-256withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA256', 'SHA-256withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA-256', 'SHA-256withECSCHNORRBSI');
- Falgorithms.Add('SHA256WITHECSCHNORRBSI', 'SHA-256withECSCHNORRBSI');
- Falgorithms.Add('SHA-256WITHECSCHNORRBSI', 'SHA-256withECSCHNORRBSI');
- Falgorithms.Add('SHA384/ECSCHNORR/BSI', 'SHA-384withECSCHNORRBSI');
- Falgorithms.Add('SHA-384/ECSCHNORR/BSI', 'SHA-384withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA384', 'SHA-384withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA-384', 'SHA-384withECSCHNORRBSI');
- Falgorithms.Add('SHA384WITHECSCHNORRBSI', 'SHA-384withECSCHNORRBSI');
- Falgorithms.Add('SHA-384WITHECSCHNORRBSI', 'SHA-384withECSCHNORRBSI');
- Falgorithms.Add('SHA512/ECSCHNORR/BSI', 'SHA-512withECSCHNORRBSI');
- Falgorithms.Add('SHA-512/ECSCHNORR/BSI', 'SHA-512withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA512', 'SHA-512withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHSHA-512', 'SHA-512withECSCHNORRBSI');
- Falgorithms.Add('SHA512WITHECSCHNORRBSI', 'SHA-512withECSCHNORRBSI');
- Falgorithms.Add('SHA-512WITHECSCHNORRBSI', 'SHA-512withECSCHNORRBSI');
- Falgorithms.Add('RIPEMD160/ECSCHNORR/BSI', 'RIPEMD160withECSCHNORRBSI');
- Falgorithms.Add('ECSCHNORRBSIWITHRIPEMD160', 'RIPEMD160withECSCHNORRBSI');
- Falgorithms.Add('RIPEMD160WITHECSCHNORRBSI', 'RIPEMD160withECSCHNORRBSI');
- // ECSCHNORR ISO
- Falgorithms.Add('SHA1/ECSCHNORR/ISO', 'SHA-1withECSCHNORRISO');
- Falgorithms.Add('SHA-1/ECSCHNORR/ISO', 'SHA-1withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA1', 'SHA-1withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA-1', 'SHA-1withECSCHNORRISO');
- Falgorithms.Add('SHA1WITHECSCHNORRISO', 'SHA-1withECSCHNORRISO');
- Falgorithms.Add('SHA-1WITHECSCHNORRISO', 'SHA-1withECSCHNORRISO');
- Falgorithms.Add('SHA224/ECSCHNORR/ISO', 'SHA-224withECSCHNORRISO');
- Falgorithms.Add('SHA-224/ECSCHNORR/ISO', 'SHA-224withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA224', 'SHA-224withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA-224', 'SHA-224withECSCHNORRISO');
- Falgorithms.Add('SHA224WITHECSCHNORRISO', 'SHA-224withECSCHNORRISO');
- Falgorithms.Add('SHA-224WITHECSCHNORRISO', 'SHA-224withECSCHNORRISO');
- Falgorithms.Add('SHA256/ECSCHNORR/ISO', 'SHA-256withECSCHNORRISO');
- Falgorithms.Add('SHA-256/ECSCHNORR/ISO', 'SHA-256withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA256', 'SHA-256withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA-256', 'SHA-256withECSCHNORRISO');
- Falgorithms.Add('SHA256WITHECSCHNORRISO', 'SHA-256withECSCHNORRISO');
- Falgorithms.Add('SHA-256WITHECSCHNORRISO', 'SHA-256withECSCHNORRISO');
- Falgorithms.Add('SHA384/ECSCHNORR/ISO', 'SHA-384withECSCHNORRISO');
- Falgorithms.Add('SHA-384/ECSCHNORR/ISO', 'SHA-384withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA384', 'SHA-384withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA-384', 'SHA-384withECSCHNORRISO');
- Falgorithms.Add('SHA384WITHECSCHNORRISO', 'SHA-384withECSCHNORRISO');
- Falgorithms.Add('SHA-384WITHECSCHNORRISO', 'SHA-384withECSCHNORRISO');
- Falgorithms.Add('SHA512/ECSCHNORR/ISO', 'SHA-512withECSCHNORRISO');
- Falgorithms.Add('SHA-512/ECSCHNORR/ISO', 'SHA-512withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA512', 'SHA-512withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHSHA-512', 'SHA-512withECSCHNORRISO');
- Falgorithms.Add('SHA512WITHECSCHNORRISO', 'SHA-512withECSCHNORRISO');
- Falgorithms.Add('SHA-512WITHECSCHNORRISO', 'SHA-512withECSCHNORRISO');
- Falgorithms.Add('RIPEMD160/ECSCHNORR/ISO', 'RIPEMD160withECSCHNORRISO');
- Falgorithms.Add('ECSCHNORRISOWITHRIPEMD160', 'RIPEMD160withECSCHNORRISO');
- Falgorithms.Add('RIPEMD160WITHECSCHNORRISO', 'RIPEMD160withECSCHNORRISO');
- // ECSCHNORR ISOx
- Falgorithms.Add('SHA1/ECSCHNORR/ISOx', 'SHA-1withECSCHNORRISOx');
- Falgorithms.Add('SHA-1/ECSCHNORR/ISOx', 'SHA-1withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA1', 'SHA-1withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA-1', 'SHA-1withECSCHNORRISOx');
- Falgorithms.Add('SHA1WITHECSCHNORRISOx', 'SHA-1withECSCHNORRISOx');
- Falgorithms.Add('SHA-1WITHECSCHNORRISOx', 'SHA-1withECSCHNORRISOx');
- Falgorithms.Add('SHA224/ECSCHNORR/ISOx', 'SHA-224withECSCHNORRISOx');
- Falgorithms.Add('SHA-224/ECSCHNORR/ISOx', 'SHA-224withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA224', 'SHA-224withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA-224', 'SHA-224withECSCHNORRISOx');
- Falgorithms.Add('SHA224WITHECSCHNORRISOx', 'SHA-224withECSCHNORRISOx');
- Falgorithms.Add('SHA-224WITHECSCHNORRISOx', 'SHA-224withECSCHNORRISOx');
- Falgorithms.Add('SHA256/ECSCHNORR/ISOx', 'SHA-256withECSCHNORRISOx');
- Falgorithms.Add('SHA-256/ECSCHNORR/ISOx', 'SHA-256withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA256', 'SHA-256withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA-256', 'SHA-256withECSCHNORRISOx');
- Falgorithms.Add('SHA256WITHECSCHNORRISOx', 'SHA-256withECSCHNORRISOx');
- Falgorithms.Add('SHA-256WITHECSCHNORRISOx', 'SHA-256withECSCHNORRISOx');
- Falgorithms.Add('SHA384/ECSCHNORR/ISOx', 'SHA-384withECSCHNORRISOx');
- Falgorithms.Add('SHA-384/ECSCHNORR/ISOx', 'SHA-384withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA384', 'SHA-384withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA-384', 'SHA-384withECSCHNORRISOx');
- Falgorithms.Add('SHA384WITHECSCHNORRISOx', 'SHA-384withECSCHNORRISOx');
- Falgorithms.Add('SHA-384WITHECSCHNORRISOx', 'SHA-384withECSCHNORRISOx');
- Falgorithms.Add('SHA512/ECSCHNORR/ISOx', 'SHA-512withECSCHNORRISOx');
- Falgorithms.Add('SHA-512/ECSCHNORR/ISOx', 'SHA-512withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA512', 'SHA-512withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHSHA-512', 'SHA-512withECSCHNORRISOx');
- Falgorithms.Add('SHA512WITHECSCHNORRISOx', 'SHA-512withECSCHNORRISOx');
- Falgorithms.Add('SHA-512WITHECSCHNORRISOx', 'SHA-512withECSCHNORRISOx');
- Falgorithms.Add('RIPEMD160/ECSCHNORR/ISOx', 'RIPEMD160withECSCHNORRISOx');
- Falgorithms.Add('ECSCHNORRISOxWITHRIPEMD160', 'RIPEMD160withECSCHNORRISOx');
- Falgorithms.Add('RIPEMD160WITHECSCHNORRISOx', 'RIPEMD160withECSCHNORRISOx');
- // ECSCHNORR LIBSECP
- Falgorithms.Add('SHA1/ECSCHNORR/LIBSECP', 'SHA-1withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-1/ECSCHNORR/LIBSECP', 'SHA-1withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA1', 'SHA-1withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA-1', 'SHA-1withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA1WITHECSCHNORRLIBSECP', 'SHA-1withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-1WITHECSCHNORRLIBSECP', 'SHA-1withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA224/ECSCHNORR/LIBSECP', 'SHA-224withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-224/ECSCHNORR/LIBSECP', 'SHA-224withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA224', 'SHA-224withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA-224', 'SHA-224withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA224WITHECSCHNORRLIBSECP', 'SHA-224withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-224WITHECSCHNORRLIBSECP', 'SHA-224withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA256/ECSCHNORR/LIBSECP', 'SHA-256withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-256/ECSCHNORR/LIBSECP', 'SHA-256withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA256', 'SHA-256withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA-256', 'SHA-256withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA256WITHECSCHNORRLIBSECP', 'SHA-256withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-256WITHECSCHNORRLIBSECP', 'SHA-256withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA384/ECSCHNORR/LIBSECP', 'SHA-384withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-384/ECSCHNORR/LIBSECP', 'SHA-384withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA384', 'SHA-384withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA-384', 'SHA-384withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA384WITHECSCHNORRLIBSECP', 'SHA-384withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-384WITHECSCHNORRLIBSECP', 'SHA-384withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA512/ECSCHNORR/LIBSECP', 'SHA-512withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-512/ECSCHNORR/LIBSECP', 'SHA-512withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA512', 'SHA-512withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHSHA-512', 'SHA-512withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA512WITHECSCHNORRLIBSECP', 'SHA-512withECSCHNORRLIBSECP');
- Falgorithms.Add('SHA-512WITHECSCHNORRLIBSECP', 'SHA-512withECSCHNORRLIBSECP');
- Falgorithms.Add('RIPEMD160/ECSCHNORR/LIBSECP',
- 'RIPEMD160withECSCHNORRLIBSECP');
- Falgorithms.Add('ECSCHNORRLIBSECPWITHRIPEMD160',
- 'RIPEMD160withECSCHNORRLIBSECP');
- Falgorithms.Add('RIPEMD160WITHECSCHNORRLIBSECP',
- 'RIPEMD160withECSCHNORRLIBSECP');
- end;
- class destructor TSignerUtilities.DestroySignerUtilities;
- begin
- Falgorithms.Free;
- Foids.Free;
- end;
- class function TSignerUtilities.GetAlgorithms: TCryptoLibStringArray;
- begin
- Result := Foids.Keys.ToArray;
- end;
- class function TSignerUtilities.GetEncodingName
- (const oid: IDerObjectIdentifier): String;
- begin
- Falgorithms.TryGetValue(oid.id, Result);
- end;
- class function TSignerUtilities.GetObjectIdentifier(mechanism: String)
- : IDerObjectIdentifier;
- var
- aliased: string;
- begin
- if (mechanism = '') then
- begin
- raise EArgumentNilCryptoLibException.CreateRes(@SMechanismNil);
- end;
- mechanism := UpperCase(mechanism);
- if (Falgorithms.TryGetValue(mechanism, aliased)) then
- begin
- mechanism := aliased;
- end;
- Foids.TryGetValue(mechanism, Result);
- end;
- class function TSignerUtilities.GetSigner
- (const id: IDerObjectIdentifier): ISigner;
- begin
- Result := GetSigner(id.id);
- end;
- class function TSignerUtilities.GetSigner(algorithm: String): ISigner;
- var
- mechanism: string;
- HashInstance: IHash;
- begin
- if (algorithm = '') then
- begin
- raise EArgumentNilCryptoLibException.CreateRes(@SAlgorithmNil);
- end;
- algorithm := UpperCase(algorithm);
- if (not Falgorithms.TryGetValue(algorithm, mechanism)) then
- begin
- mechanism := algorithm;
- end;
- if (mechanism = 'NONEwithECDSA') then
- begin
- HashInstance := THashFactory.TNullDigestFactory.CreateNullDigest();
- HashInstance.Initialize;
- Result := (TDsaDigestSigner.Create(TECDsaSigner.Create() as IECDsaSigner,
- HashInstance));
- Exit;
- end;
- if (mechanism = 'SHA-1withECDSA') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA1();
- HashInstance.Initialize;
- Result := (TDsaDigestSigner.Create(TECDsaSigner.Create() as IECDsaSigner,
- HashInstance));
- Exit;
- end;
- if (mechanism = 'SHA-224withECDSA') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_224();
- HashInstance.Initialize;
- Result := (TDsaDigestSigner.Create(TECDsaSigner.Create() as IECDsaSigner,
- HashInstance));
- Exit;
- end;
- if (mechanism = 'SHA-256withECDSA') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_256();
- HashInstance.Initialize;
- Result := (TDsaDigestSigner.Create(TECDsaSigner.Create() as IECDsaSigner,
- HashInstance));
- Exit;
- end;
- if (mechanism = 'SHA-384withECDSA') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_384();
- HashInstance.Initialize;
- Result := (TDsaDigestSigner.Create(TECDsaSigner.Create() as IECDsaSigner,
- HashInstance));
- Exit;
- end;
- if (mechanism = 'SHA-512withECDSA') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_512();
- HashInstance.Initialize;
- Result := (TDsaDigestSigner.Create(TECDsaSigner.Create() as IECDsaSigner,
- HashInstance));
- Exit;
- end;
- if (mechanism = 'RIPEMD160withECDSA') then
- begin
- HashInstance := THashFactory.TCrypto.CreateRIPEMD160();
- HashInstance.Initialize;
- Result := (TDsaDigestSigner.Create(TECDsaSigner.Create() as IECDsaSigner,
- HashInstance));
- Exit;
- end;
- //
- if (mechanism = 'SHA-1withECSCHNORRBSI') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA1();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'BSI');
- Exit;
- end;
- if (mechanism = 'SHA-224withECSCHNORRBSI') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_224();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'BSI');
- Exit;
- end;
- if (mechanism = 'SHA-256withECSCHNORRBSI') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_256();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'BSI');
- Exit;
- end;
- if (mechanism = 'SHA-384withECSCHNORRBSI') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_384();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'BSI');
- Exit;
- end;
- if (mechanism = 'SHA-512withECSCHNORRBSI') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_512();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'BSI');
- Exit;
- end;
- if (mechanism = 'RIPEMD160withECSCHNORRBSI') then
- begin
- HashInstance := THashFactory.TCrypto.CreateRIPEMD160();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'BSI');
- Exit;
- end;
- //
- if (mechanism = 'SHA-1withECSCHNORRISO') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA1();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISO');
- Exit;
- end;
- if (mechanism = 'SHA-224withECSCHNORRISO') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_224();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISO');
- Exit;
- end;
- if (mechanism = 'SHA-256withECSCHNORRISO') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_256();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISO');
- Exit;
- end;
- if (mechanism = 'SHA-384withECSCHNORRISO') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_384();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISO');
- Exit;
- end;
- if (mechanism = 'SHA-512withECSCHNORRISO') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_512();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISO');
- Exit;
- end;
- if (mechanism = 'RIPEMD160withECSCHNORRISO') then
- begin
- HashInstance := THashFactory.TCrypto.CreateRIPEMD160();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISO');
- Exit;
- end;
- //
- if (CompareText(mechanism, 'SHA-1withECSCHNORRISOx') = 0) then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA1();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISOx');
- Exit;
- end;
- if (CompareText(mechanism, 'SHA-224withECSCHNORRISOx') = 0) then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_224();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISOx');
- Exit;
- end;
- if (CompareText(mechanism, 'SHA-256withECSCHNORRISOx') = 0) then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_256();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISOx');
- Exit;
- end;
- if (CompareText(mechanism, 'SHA-384withECSCHNORRISOx') = 0) then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_384();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISOx');
- Exit;
- end;
- if (CompareText(mechanism, 'SHA-512withECSCHNORRISOx') = 0) then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_512();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISOx');
- Exit;
- end;
- if (CompareText(mechanism, 'RIPEMD160withECSCHNORRISOx') = 0) then
- begin
- HashInstance := THashFactory.TCrypto.CreateRIPEMD160();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'ISOx');
- Exit;
- end;
- //
- if (mechanism = 'SHA-1withECSCHNORRLIBSECP') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA1();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'LIBSECP');
- Exit;
- end;
- if (mechanism = 'SHA-224withECSCHNORRLIBSECP') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_224();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'LIBSECP');
- Exit;
- end;
- if (mechanism = 'SHA-256withECSCHNORRLIBSECP') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_256();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'LIBSECP');
- Exit;
- end;
- if (mechanism = 'SHA-384withECSCHNORRLIBSECP') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_384();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'LIBSECP');
- Exit;
- end;
- if (mechanism = 'SHA-512withECSCHNORRLIBSECP') then
- begin
- HashInstance := THashFactory.TCrypto.CreateSHA2_512();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'LIBSECP');
- Exit;
- end;
- if (mechanism = 'RIPEMD160withECSCHNORRLIBSECP') then
- begin
- HashInstance := THashFactory.TCrypto.CreateRIPEMD160();
- HashInstance.Initialize;
- Result := TECSchnorrSigner.Create(HashInstance, 'LIBSECP');
- Exit;
- end;
- raise ESecurityUtilityCryptoLibException.CreateResFmt(@SUnRecognizedAlgorithm,
- [algorithm]);
- end;
- end.
|