github.com/tommi2day/gomodules@v1.13.2-0.20240423190010-b7d55d252a27/pwlib/rsa_test.go (about) 1 package pwlib 2 3 import ( 4 "crypto/rsa" 5 "os" 6 "path" 7 "testing" 8 9 "github.com/tommi2day/gomodules/test" 10 11 "github.com/stretchr/testify/assert" 12 "github.com/stretchr/testify/require" 13 ) 14 15 var ( 16 p *rsa.PublicKey 17 k *rsa.PrivateKey 18 ) 19 20 func TestGenRsaKey(t *testing.T) { 21 test.Testinit(t) 22 err := os.Chdir(test.TestDir) 23 require.NoErrorf(t, err, "ChDir failed") 24 25 pubfilename := "testdata/key.pub" 26 privfilename := "testdata/key.pem" 27 _ = os.Remove(pubfilename) 28 _ = os.Remove(privfilename) 29 30 t.Run("Key Gen unencrypted", func(t *testing.T) { 31 pubkey, privkey, err := GenRsaKey(pubfilename, privfilename, "") 32 assert.NoErrorf(t, err, "Error while creating key: %s", err) 33 assert.NotEmpty(t, pubkey) 34 assert.NotEmpty(t, privkey) 35 assert.IsTypef(t, p, pubkey, "Not a public key") 36 assert.IsTypef(t, k, privkey, "Not a private key") 37 assert.FileExists(t, pubfilename) 38 assert.FileExists(t, privfilename) 39 }) 40 pubfilename = "testdata/enckey.pub" 41 privfilename = "testdata/enckey.pem" 42 _ = os.Remove(pubfilename) 43 _ = os.Remove(privfilename) 44 t.Run("Key Gen encrypted", func(t *testing.T) { 45 pubkey, privkey, err := GenRsaKey(pubfilename, privfilename, "gen_test") 46 assert.NoErrorf(t, err, "Error while creating key: %s", err) 47 assert.NotEmpty(t, pubkey) 48 assert.NotEmpty(t, privkey) 49 assert.IsTypef(t, p, pubkey, "Not a public key") 50 assert.IsTypef(t, k, privkey, "Not a private key") 51 assert.FileExists(t, pubfilename) 52 assert.FileExists(t, privfilename) 53 //nolint gosec 54 content, err := os.ReadFile(privfilename) 55 assert.NoErrorf(t, err, "File Read Error %s", err) 56 assert.Contains(t, string(content), "Proc-Type: 4,ENCRYPTED") 57 }) 58 } 59 60 func TestGetKeyFromFile(t *testing.T) { 61 test.Testinit(t) 62 app := "test_get" 63 testPubFile := path.Join(test.TestData, app+pubExt) 64 testNotEncPrivFile := path.Join(test.TestData, app+"_notenc"+privExt) 65 testEncPrivFile := path.Join(test.TestData, app+privExt) 66 defaultPassword := app 67 err := os.Chdir(test.TestDir) 68 require.NoError(t, err, "ChDir failed") 69 _ = os.Remove(testPubFile) 70 _ = os.Remove(testNotEncPrivFile) 71 _, _, err = GenRsaKey(testPubFile, testNotEncPrivFile, "") 72 require.NoErrorf(t, err, "GenKey NoEncrypt failed failed:%s", err) 73 t.Run("Get Public Key", func(t *testing.T) { 74 pubkey, err := GetPublicKeyFromFile(testPubFile) 75 assert.NoErrorf(t, err, "Error while reading pubkey: %s", err) 76 assert.NotEmpty(t, pubkey) 77 assert.IsTypef(t, p, pubkey, "Not a public key") 78 }) 79 t.Run("Get private key without password", func(t *testing.T) { 80 pubkey, privkey, err := GetPrivateKeyFromFile(testNotEncPrivFile, "") 81 assert.NoErrorf(t, err, "Error while reading privkey: %s", err) 82 assert.NotEmpty(t, pubkey) 83 assert.IsTypef(t, p, pubkey, "Not a public key") 84 assert.NotEmpty(t, privkey) 85 assert.IsTypef(t, k, privkey, "Not a private key") 86 }) 87 t.Run("Get private key with password, but should be none", func(t *testing.T) { 88 pubkey, privkey, err := GetPrivateKeyFromFile(testNotEncPrivFile, defaultPassword) 89 assert.Error(t, err, "Password given, but was not set") 90 assert.Empty(t, pubkey) 91 assert.Empty(t, privkey) 92 }) 93 94 // test with encrypted passwords 95 _ = os.Remove(testPubFile) 96 _ = os.Remove(testEncPrivFile) 97 _, _, err = GenRsaKey(testPubFile, testEncPrivFile, defaultPassword) 98 require.NoErrorf(t, err, "GenKey NoEncrypt failed failed:%s", err) 99 t.Run("Get private key with correct password", func(t *testing.T) { 100 pubkey, privkey, err := GetPrivateKeyFromFile(testEncPrivFile, defaultPassword) 101 assert.NoErrorf(t, err, "Error while reading privkey: %s", err) 102 assert.NotEmpty(t, pubkey) 103 assert.IsTypef(t, p, pubkey, "Not a public key") 104 assert.NotEmpty(t, privkey) 105 assert.IsTypef(t, k, privkey, "Not a private key") 106 }) 107 t.Run("Get private key with wrong password", func(t *testing.T) { 108 pubkey, privkey, err := GetPrivateKeyFromFile(testEncPrivFile, "xxxx") 109 assert.Errorf(t, err, "Wrong Password has been accepted: ") 110 assert.Empty(t, pubkey) 111 assert.Empty(t, privkey) 112 }) 113 app = "test_pkcs1" 114 t.Run("Get private key with PKCS1 (traditional openssl)", func(t *testing.T) { 115 pubkey, privkey, err := GetPrivateKeyFromFile(app+".pem.txt", app) 116 assert.NoErrorf(t, err, "Error while reading privkey: %s", err) 117 assert.NotEmpty(t, pubkey) 118 assert.IsTypef(t, p, pubkey, "Not a public key") 119 assert.NotEmpty(t, privkey) 120 assert.IsTypef(t, k, privkey, "Not a private key") 121 }) 122 t.Run("Get Public Key PKCS1", func(t *testing.T) { 123 pubkey, err := GetPublicKeyFromFile(app + ".pub.txt") 124 assert.NoErrorf(t, err, "Error while reading pubkey: %s", err) 125 assert.NotEmpty(t, pubkey) 126 assert.IsTypef(t, p, pubkey, "Not a public key") 127 }) 128 }