CryptoTestRSA.Mod 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. MODULE CryptoTestRSA;
  2. IMPORT
  3. RSA := CryptoRSA, B := CryptoBigNumbers, P := CryptoPrimes,
  4. Files, Out := KernelLog, WMDialogs;
  5. CONST
  6. Size = 1024;
  7. PrivateKeyFile = "SSH.RSAKey.priv";
  8. PublicKeyFile = "SSH.RSAKey.pub";
  9. PROCEDURE Test1*;
  10. VAR
  11. pub, priv: RSA.Key;
  12. p, q, e, signature: B.BigNumber;
  13. digest: ARRAY 64 OF CHAR;
  14. BEGIN
  15. Out.String( "generating RSA Keys" ); Out.Ln;
  16. p := P.NewPrime( Size DIV 2, FALSE );
  17. Out.String("p = "); B.Print( p ); Out.Ln;
  18. q := P.NewPrime( Size DIV 2, FALSE );
  19. Out.String("q = "); B.Print( q ); Out.Ln;
  20. B.AssignInt( e, 3 );
  21. RSA.MakeKeys( p, q, e, "Test Key", pub, priv );
  22. digest := "Everyone gets Friday off her panties.";
  23. signature := priv.Sign( digest, 32 );
  24. IF signature # NIL THEN
  25. IF pub.Verify( digest, 32, signature ) THEN
  26. Out.String( "sign : verify ok" ); Out.Ln;
  27. ELSE
  28. Out.String( "sign : verify failed" ); Out.Ln;
  29. END
  30. ELSE
  31. Out.String( "error: wrong passphrase for private key" ); Out.Ln
  32. END;
  33. END Test1;
  34. PROCEDURE TestRSAKeyFiles*;
  35. CONST
  36. headline = "enter passphrase for opening your private key";
  37. VAR
  38. pub, priv: RSA.Key;
  39. signature: B.BigNumber;
  40. pw, digest: ARRAY 64 OF CHAR;
  41. f: Files.File; r: Files.Reader;
  42. i, ignore: LONGINT;
  43. BEGIN
  44. f := Files.Old( PrivateKeyFile ); Files.OpenReader( r, f, 0 );
  45. i := 0;
  46. REPEAT
  47. ignore := WMDialogs.QueryPassword( headline, pw );
  48. r.SetPos( 0 );
  49. priv := RSA.LoadPrivateKey( r, pw );
  50. INC( i )
  51. UNTIL (priv # NIL) OR (i = 3);
  52. IF priv = NIL THEN
  53. Out.String( "wrong passphrase" ); Out.Ln; RETURN
  54. END;
  55. f := Files.Old( PublicKeyFile ); Files.OpenReader( r, f, 0 );
  56. pub := RSA.LoadPublicKey( r );
  57. digest := "Everyone gets Friday off her panties.";
  58. signature := priv.Sign( digest, 32 );
  59. IF pub.Verify( digest, 32, signature ) THEN
  60. Out.String( "sign : verify ok" ); Out.Ln;
  61. ELSE
  62. Out.String( "sign : verify failed" ); Out.Ln;
  63. END
  64. END TestRSAKeyFiles;
  65. END CryptoTestRSA.
  66. Compiler.Compile CryptoRSA.Mod CryptoTestRSA.Mod ~
  67. System.Free CryptoTestRSA CryptoRSA CryptoPrimes CryptoBigNumbers~
  68. CryptoTestRSA.Test1 ~
  69. CryptoTestRSA.TestRSAKeyFiles ~