utestpem.pp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. unit utestpem;
  2. {$mode ObjFPC}{$H+}
  3. interface
  4. uses
  5. Classes, SysUtils, fpcunit, testregistry, fpasn, fppem;
  6. Type
  7. { TTestPEM }
  8. TTestPEM = Class(TTestCase)
  9. Published
  10. Procedure TestLoad;
  11. end;
  12. implementation
  13. uses basenenc, fphashutils, fpecc;
  14. { TTestPEM }
  15. Const
  16. PrivateKeyFile = 'private-key.pem';
  17. procedure TTestPEM.TestLoad;
  18. Const
  19. // Hex encoded keys, Obtained using XMLRAD
  20. // Private key matched openssl
  21. // openssl ec -text -in private-key.pem -noout
  22. resprivatekey = '8D8DC61A006BF4E8C508ACFDEB331E385E763B6C4CD52B918C438D5B1804A5A9';
  23. respublickey = '03675CA1BD5D466F5EE30CEC92FDECCB0834A6467E7013CAF05C7B68648F7DB93C';
  24. ResX = 'Z1yhvV1Gb17jDOyS_ezLCDSmRn5wE8rwXHtoZI99uTw';
  25. ResY = 'kBzplHWhOlp71lYjOaoK6Bfo9crVT3mbCEAWqK-1FVs';
  26. // Obtained through OpenSSL: public key as X&Y (DER 04 prefix removed)
  27. ResXY = {04}
  28. '675ca1bd5d466f5ee30cec92fdec'+
  29. 'cb0834a6467e7013caf05c7b68648f'+
  30. '7db93c901ce99475a13a5a7bd65623'+
  31. '39aa0ae817e8f5cad54f799b084016'+
  32. 'a8afb5155b';
  33. var
  34. List: TStrings;
  35. PrivateKey : TEccPrivateKey;
  36. PublicKey : TEccPublicKey;
  37. XHex,YHex,PublicKeyX64, PublicKeyY64 : Ansistring;
  38. Res : Boolean;
  39. begin
  40. List := TStringList.Create;
  41. try
  42. Res:=FileExists(PrivateKeyFile) and PemIsECDSA(PrivateKeyFile, List);
  43. if Res then
  44. PemLoadPublicKey64FromList(List, PrivateKey, PublicKey, PublicKeyX64, PublicKeyY64);
  45. AssertEquals('Private key',resprivatekey,BytesToHexStr(BytesFromVar(@PrivateKey,Sizeof(PrivateKey))));
  46. AssertEquals('Public key',respublickey,BytesToHexStr(BytesFromVar(@PublicKey,Sizeof(PublicKey))));
  47. AssertEquals('X',resX,PublicKeyX64);
  48. AssertEquals('Y',resY,PublicKeyY64);
  49. XHex:=base16.Encode(base64url.Decode(PublicKeyX64),False);
  50. YHex:=base16.Encode(base64url.Decode(PublicKeyY64),False);
  51. AssertEquals('Public as X,Y',ResXY,LowerCase(XHex+YHex));
  52. // Writeln('X ', PublicKeyX64,' -> ',XHex);
  53. // Writeln('Y ', PublicKeyY64,' -> ',YHex);
  54. finally
  55. List.Free;
  56. end;
  57. end;
  58. initialization
  59. RegisterTest(TTestPEM);
  60. end.