2
0
Эх сурвалжийг харах

* Test for es256 signature, by Andrew Haines

Michaël Van Canneyt 7 сар өмнө
parent
commit
2c03eb2221

+ 39 - 0
packages/fcl-web/tests/tcjwt.pp

@@ -54,6 +54,7 @@ type
     procedure TestVerifySHA384;
     procedure TestVerifySHA384;
 
 
     // ES
     // ES
+    procedure TestSignES256;
     procedure TestVerifyES256;
     procedure TestVerifyES256;
     procedure TestVerifyES256Pem;
     procedure TestVerifyES256Pem;
 
 
@@ -296,6 +297,44 @@ begin
   AssertEquals('Have correct admin',False,(TMyJWT(FVerifyResult).Claims as TMyClaims).Admin);
   AssertEquals('Have correct admin',False,(TMyJWT(FVerifyResult).Claims as TMyClaims).Admin);
 end;
 end;
 
 
+procedure TTestJWT.TestSignES256;
+// Private key in PEM format
+Const APrivateKeyPem =
+    '-----BEGIN EC PRIVATE KEY-----'+ #10+
+    'MHcCAQEEIFzS3/5bCnrlpa4902/zkYzURF6E2D8pazgnJu4smhpQoAoGCCqGSM49'+ #10+
+    'AwEHoUQDQgAEqTjyg2z65i+zbyUZW8BQ+K87DNsICRaEH7Fy7Rm3MseXy9ItSCQU'+ #10+
+    'VeJbtO6kYUA00mx7bKoC1sx5sbtFExnYPQ=='+ #10+
+    '-----END EC PRIVATE KEY-----';
+
+
+Var
+  S : TStringStream;
+  aPrivateKey : TEccPrivateKey;
+  aPublicKey : TEccPublicKey;
+  X,Y : AnsiString;
+begin
+  S:=TStringStream.Create(aPrivateKeyPem);
+  try
+    PemLoadECDSA(S,aPrivateKey,aPublicKey,X,Y);
+  finally
+    S.Free;
+  end;
+  FKey:=TJWTKey.Create(@aPrivateKey,SizeOf(TEccPrivateKey));
+  FJWT.JOSE.alg:='ES256';
+  //Writeln('JOSE: ',FJWT.JOSE.AsString);
+  //Writeln('Claims: ',FJWT.Claims.AsString);
+
+  FJWT.Sign(FKey);
+  //WriteLn('Signature: ',FJWT.Signature);
+  //WriteLn('JWT: ',FJWT.AsEncodedString);
+
+  FVerifyResult := TMyJWT.ValidateJWT(FJWT.AsEncodedString, FKey);
+  AssertNotNull('Have result',FVerifyResult);
+  AssertEquals('Correct class',TMyJWT,FVerifyResult.ClassType);
+  AssertNotNull('Have result.claims',FVerifyResult.Claims);
+  AssertEquals('Correct claims class',TMyClaims,FVerifyResult.Claims.ClassType);
+end;
+
 procedure TTestJWT.TestVerifyRS256Pem;
 procedure TTestJWT.TestVerifyRS256Pem;
 begin
 begin
   TestVerifyRSAPem(TJWTSignerRS256);
   TestVerifyRSAPem(TJWTSignerRS256);