1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- unit utestpem;
- {$mode ObjFPC}{$H+}
- interface
- uses
- Classes, SysUtils, fpcunit, testregistry, fpasn, fppem;
- Type
- { TTestPEM }
- TTestPEM = Class(TTestCase)
- Published
- Procedure TestLoad;
- end;
- implementation
- uses basenenc, fphashutils, fpecc;
- { TTestPEM }
- Const
- PrivateKeyFile = 'private-key.pem';
- procedure TTestPEM.TestLoad;
- Const
- // Hex encoded keys, Obtained using XMLRAD
- // Private key matched openssl
- // openssl ec -text -in private-key.pem -noout
- resprivatekey = '8D8DC61A006BF4E8C508ACFDEB331E385E763B6C4CD52B918C438D5B1804A5A9';
- respublickey = '03675CA1BD5D466F5EE30CEC92FDECCB0834A6467E7013CAF05C7B68648F7DB93C';
- ResX = 'Z1yhvV1Gb17jDOyS_ezLCDSmRn5wE8rwXHtoZI99uTw';
- ResY = 'kBzplHWhOlp71lYjOaoK6Bfo9crVT3mbCEAWqK-1FVs';
- // Obtained through OpenSSL: public key as X&Y (DER 04 prefix removed)
- ResXY = {04}
- '675ca1bd5d466f5ee30cec92fdec'+
- 'cb0834a6467e7013caf05c7b68648f'+
- '7db93c901ce99475a13a5a7bd65623'+
- '39aa0ae817e8f5cad54f799b084016'+
- 'a8afb5155b';
- var
- List: TStrings;
- PrivateKey : TEccPrivateKey;
- PublicKey : TEccPublicKey;
- XHex,YHex,PublicKeyX64, PublicKeyY64 : Ansistring;
- Res : Boolean;
- begin
- List := TStringList.Create;
- try
- Res:=FileExists(PrivateKeyFile) and PemIsECDSA(PrivateKeyFile, List);
- if Res then
- PemLoadPublicKey64FromList(List, PrivateKey, PublicKey, PublicKeyX64, PublicKeyY64);
- AssertEquals('Private key',resprivatekey,BytesToHexStr(BytesFromVar(@PrivateKey,Sizeof(PrivateKey))));
- AssertEquals('Public key',respublickey,BytesToHexStr(BytesFromVar(@PublicKey,Sizeof(PublicKey))));
- AssertEquals('X',resX,PublicKeyX64);
- AssertEquals('Y',resY,PublicKeyY64);
- XHex:=base16.Encode(base64url.Decode(PublicKeyX64),False);
- YHex:=base16.Encode(base64url.Decode(PublicKeyY64),False);
- AssertEquals('Public as X,Y',ResXY,LowerCase(XHex+YHex));
- // Writeln('X ', PublicKeyX64,' -> ',XHex);
- // Writeln('Y ', PublicKeyY64,' -> ',YHex);
- finally
- List.Free;
- end;
- end;
- initialization
- RegisterTest(TTestPEM);
- end.
|