add test key

This commit is contained in:
Pablo Ovelleiro Corral 2024-03-25 17:22:47 +01:00
parent 698f59df42
commit 6dad98956c
No known key found for this signature in database
GPG key ID: 29E9A6ED72CCB334
10 changed files with 92 additions and 26 deletions

40
README.md Normal file
View file

@ -0,0 +1,40 @@
Example key provided in `./gnupg`
```
gpg --homedir ./gnupg_testkey/ -K
/home/pinpox/code/github.com/pinpox/gpg2age/./gnupg_testkey/pubring.kbx
-----------------------------------------------------------------------
sec ed25519 2024-03-25 [C]
9FE4D484B69DB9F5C7AA208E76188CF30717B54E
uid [ultimate] test (test) <test@test.com>
ssb ed25519 2024-03-25 [S]
ssb cv25519 2024-03-25 [E]
ssb ed25519 2024-03-25 [A]
```
### Get age key and encrypt test file
```sh
gpg --homedir ./gnupg --export-ssh-key 9FE4D484B69DB9F5C7AA208E76188CF30717B54E
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICYvKXGcG4a19tTT0Rycbn+D0r/YlKltLJ9dY2gR/Fjx openpgp:0x47C9F3FF
```
```sh
gpg --homedir ./gnupg --export-ssh-key 9FE4D484B69DB9F5C7AA208E76188CF30717B54E | ssh-to-age impure ❄ ssh-to-age
age18s8m9hvlrwvltgys4lafyyqe356ntc7e06t4kd2nccqm5amsaa2s878mju # saved as age-public-key
```
```sh
age --encrypt -R age-public-key testfile.txt > testfile.txt.age
```
### Try to decrypt
```sh
age --decrypt --identity age-secret-key --output decrypted testfile.txt.age impure ❄ ssh-to-age age
age: error: no identity matched any of the recipients
age: report unexpected or unhelpful errors at https://filippo.io/age/report
```
FAIL :(

1
age-public-key Normal file
View file

@ -0,0 +1 @@
age18s8m9hvlrwvltgys4lafyyqe356ntc7e06t4kd2nccqm5amsaa2s878mju

1
age-secret-key Normal file
View file

@ -0,0 +1 @@
AGE-SECRET-KEY-165W948VSG5QEM0RPEUX8T3K4YXJT2WF83C2GXQH8Q3Q0ZHCTH44SSV0H34

BIN
gnupg/pubring.kbx Normal file

Binary file not shown.

BIN
gnupg/trustdb.gpg Normal file

Binary file not shown.

34
main.go
View file

@ -16,12 +16,14 @@ import (
"crypto/ed25519" "crypto/ed25519"
"errors" "errors"
"github.com/Mic92/ssh-to-age/bech32" "github.com/Mic92/ssh-to-age/bech32"
"github.com/davecgh/go-spew/spew"
"golang.org/x/crypto/curve25519" "golang.org/x/crypto/curve25519"
// "github.com/davecgh/go-spew/spew"
// "bytes" // "bytes"
// "golang.org/x/crypto/ssh" // "golang.org/x/crypto/ssh"
// "golang.org/x/crypto/curve25519" // "golang.org/x/crypto/curve25519"
// "reflect" // "https://pkg.go.dev/crypto/ed25519#PrivateKey
// "crypto/ed25519"ccc1be8d-24dc-41ad-9d66-b657711419d7
"reflect"
// "filippo.io/edwards25519" // "filippo.io/edwards25519"
) )
@ -54,12 +56,7 @@ func ed25519PrivateKeyToCurve25519(pk ed25519.PrivateKey) ([]byte, error) {
return out[:curve25519.ScalarSize], nil return out[:curve25519.ScalarSize], nil
} }
func SSHPrivateKeyToAge(privatekey ed25519.PrivateKey, passphrase []byte) (*string, error) { func SSHPrivateKeyToAge(bytes, passphrase []byte) (*string, error) {
bytes, err := ed25519PrivateKeyToCurve25519(privatekey)
if err != nil {
return nil, err
}
s, err := bech32.Encode("AGE-SECRET-KEY-", bytes) s, err := bech32.Encode("AGE-SECRET-KEY-", bytes)
if err != nil { if err != nil {
@ -71,22 +68,31 @@ func SSHPrivateKeyToAge(privatekey ed25519.PrivateKey, passphrase []byte) (*stri
func main() { func main() {
e, err := readEntity("test-key.asc") keyfile := "./gnupg/test-key.asc"
e, err := readEntity(keyfile)
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }
// log.Println(reflect.TypeOf(e.PrivateKey.PrivateKey)) spew.Config.MaxDepth = 2
spew.Config.Indent = " "
log.Println(reflect.TypeOf(e.PrivateKey.PrivateKey))
castkey, ok := e.PrivateKey.PrivateKey.(*eddsa.PrivateKey) castkey, ok := e.PrivateKey.PrivateKey.(*eddsa.PrivateKey)
if !ok { if !ok {
log.Fatal("failed to cast") log.Fatal("failed to cast")
} }
// spew.Dump(castkey) spew.Dump(castkey)
// TODO: Not sure if these are the correct bytes ?????? // TODO: are these the correct bytes?
agekey, err := SSHPrivateKeyToAge(castkey.D, []byte{}) var privkey ed25519.PrivateKey = castkey.D
bytes, err := ed25519PrivateKeyToCurve25519(privkey)
if err != nil {
log.Fatal(err)
}
agekey, err := SSHPrivateKeyToAge(bytes, []byte{})
if err != nil { if err != nil {
log.Fatal(err) log.Fatal(err)
} }

1
ssh-pubkey Normal file
View file

@ -0,0 +1 @@
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICYvKXGcG4a19tTT0Rycbn+D0r/YlKltLJ9dY2gR/Fjx openpgp:0x47C9F3FF

View file

@ -1,15 +1,26 @@
-----BEGIN PGP PRIVATE KEY BLOCK----- -----BEGIN PGP PRIVATE KEY BLOCK-----
lFgEZfs3+hYJKwYBBAHaRw8BAQdA84KtNLJxo2+ouxNljoM1WFWFgQ8p5OruK9wF lFgEZgGUQBYJKwYBBAHaRw8BAQdAMKqz0/asx4jNcVll94PNWK0GhUbJn2vvLWZu
VciSD88AAQCk+SB8eNvB8Hlh5DZaDa6/CmIlVn4mUvtfEJiHeG2FOg8QtBR0ZXN0 xos9Oz4AAQDC2iB2GpUXbtJMPyn7x9T+jZDP5s0DFR9va2V/upKfchBytBt0ZXN0
IDx0ZXN0QHRlc3QuY29tPoiZBBMWCgBBFiEEtlDulB3vc9KgkwiDlRKRhMfGt/wF ICh0ZXN0KSA8dGVzdEB0ZXN0LmNvbT6IkwQTFgoAOxYhBJ/k1IS2nbn1x6ogjnYY
AmX7N/oCGwMFCQWjmoAFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQlRKR jPMHF7VOBQJmAZRAAhsBBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEHYY
hMfGt/xSBwEAqCZ8UZy757lz9ydWTM0DmlS6f2uCrnKZrtdl6R9Gr5UA/itADi8T jPMHF7VOvpMBAJJi5eOZVErrSHyvSfic4LufaR7fUd89L9eynHSx5Cp5AQCZogU5
wvjQNE7AuNC8f4vTo6j5oyNn3EcirKewQ6oPnF0EZfs3+hIKKwYBBAGXVQEFAQEH HSv+paIFol1TAE6+NmmowMB1AfoPRfgmJkEvDJxYBGYBlSMWCSsGAQQB2kcPAQEH
QDBidLlxD/45Qm/ptsndH9sO+KyJmTMFvDrEa8PuI1pAAwEIBwAA/2vJFIBIXPfo QInBN59L8q33LhfUuxJCR/DSsoQCJA0lkXnxrm9R6q+sAAD+I5FMI4vPF90QuU6T
J/uKbcYQtuFqkxhQIHXZCVz1u/bmlPLQEuqIfgQYFgoAJhYhBLZQ7pQd73PSoJMI C80aGfQ6etYMQc1iUAPEAlB0LzQNXojvBBgWCgAgFiEEn+TUhLadufXHqiCOdhiM
g5USkYTHxrf8BQJl+zf6AhsMBQkFo5qAAAoJEJUSkYTHxrf8oSMA/2kGBPEiL6lm 8wcXtU4FAmYBlSMCGwIAgQkQdhiM8wcXtU52IAQZFgoAHRYhBCdPmI8t9EpgeCgC
4lJnV4Sju5XlhQgtJ1gMoXQd90xHyyL1AP4h+cq+z6vDMV0epoIw85PU1aNlfKoE WfMLK/n7oQXBBQJmAZUjAAoJEPMLK/n7oQXBN2gBAN8oHUADMQ8WDduc2Elhjiaw
551zUvwEsJa0Ag== aQ19ygb3rpcHrNW1rlWeAQCTVM4oogoecqYGDthvHV+5wk6nYhkpuLkDKm1hgTep
=UGWS C3Q+AP9mE3YjRNcpeGZVceqsiPcdLUEfbMTqAYfAOAmn9FRUpwEA6SXje0n6umix
ArKnOkPfH9ctJxMGdJmti8Oo8y0ovAScXQRmAZUwEgorBgEEAZdVAQUBAQdARxBe
90CUDkw7l0PHidsEueTLijE9eXZ01JlHLDoZx2ADAQgHAAD/egF2H4MKU6pEU2ar
uuKfpa+TJg1I6WlhQoraoWgJ3nAPl4h4BBgWCgAgFiEEn+TUhLadufXHqiCOdhiM
8wcXtU4FAmYBlTACGwwACgkQdhiM8wcXtU5H2wD/Q4etKCvgr4WTJ/9iON+Ptwm/
P/KJrtSi2QKB0ZlCJFMBAOFkBbjsFDYxfWyX1uu4mQyBHB9dFEKExlmQMaWbgF0C
nFgEZgGVShYJKwYBBAHaRw8BAQdAJi8pcZwbhrX21NPRHJxuf4PSv9iUqW0sn11j
aBH8WPEAAP4wjI46SYrEwGL8kOAfAsVmsYW1Cwo4uKL44Nj7qolUUhIJiHgEGBYK
ACAWIQSf5NSEtp259ceqII52GIzzBxe1TgUCZgGVSgIbIAAKCRB2GIzzBxe1TpHO
AP9rBhTpMlh89hXBXl74V3dW6ACI79udkSbl8APYP2KUHwEAj5+PDPqO1kTNT4/o
D3FU4DR8FKcXGRCSOnDCEIA+nA0=
=24OF
-----END PGP PRIVATE KEY BLOCK----- -----END PGP PRIVATE KEY BLOCK-----

1
testfile.txt Normal file
View file

@ -0,0 +1 @@
This is some secret text

5
testfile.txt.age Normal file
View file

@ -0,0 +1,5 @@
age-encryption.org/v1
-> X25519 XM0StGPW8M4eD+lA5iNrkaC+gWoV+q7QSBld/vvR3iY
NqvNuPIYKOL/w3ZgAcBUmcS1WEcYUGPprdqacZlqWqg
--- zF6LCW7uBZqp+twB5K7KmP2fWpiqSXs8S5Ic0DI2wUI
³IýŸ•B T^ÔW6nHøp~(THîEÓ¥¾:Ÿ/Ï°zdN̳g»8S¸!ψ”¹ÐL