checking in for the night.
key generation should be done, need to finish packing/formatting. also need to start on moduli generation.
This commit is contained in:
@@ -1,10 +1,13 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
`crypto/cipher`
|
||||
`crypto/rsa`
|
||||
`encoding/hex`
|
||||
`fmt`
|
||||
"crypto/aes"
|
||||
"crypto/cipher"
|
||||
"crypto/rsa"
|
||||
"encoding/hex"
|
||||
"fmt"
|
||||
|
||||
"github.com/dchest/bcrypt_pbkdf"
|
||||
)
|
||||
|
||||
// ssh-keygen -f /tmp/tmp2xzvpjhn -q -o -t rsa -b 4096 -C "This is a comment string" -N test -a 100
|
||||
@@ -379,24 +382,38 @@ bc2a63a20ebb309cc6f3e65db301a058b8dace07e71b38f3f3595433f69b198f
|
||||
|
||||
func main() {
|
||||
const (
|
||||
passphrase string = "test"
|
||||
rounds int = 100
|
||||
keySize int = 4096
|
||||
lenPlain int = 160
|
||||
publicExponent int = 65537
|
||||
passphrase string = "test"
|
||||
saltLen int = 16 // 3.0.0.0
|
||||
rounds int = 100 // 3.0.0.1
|
||||
keySize int = 4096
|
||||
crtLen int = 256 // 4.0.1.4
|
||||
dLen int = 512 // 4.0.1.3
|
||||
e int = 65537 // 4.0.0.1
|
||||
nLen int = 513 // 4.0.0.2
|
||||
pLen int = 257 // 4.0.1.5
|
||||
qLen int = 257 // 4.0.1.6
|
||||
dataLen int = 1872 // 4.0.1
|
||||
)
|
||||
var salt []byte
|
||||
var bcryptKey []byte
|
||||
var sk []byte
|
||||
var pk []byte
|
||||
var pubkey rsa.PublicKey
|
||||
var crt []byte
|
||||
var d []byte
|
||||
var n []byte
|
||||
var p []byte
|
||||
var q []byte
|
||||
var key rsa.PrivateKey
|
||||
var decrypted []byte
|
||||
var aesCtx cipher.Block
|
||||
var encData []byte
|
||||
|
||||
decrypted = make([]byte, lenPlain)
|
||||
encData = make([]byte, lenPlain)
|
||||
crt = make([]byte, crtLen)
|
||||
d = make([]byte, dLen)
|
||||
n = make([]byte, nLen)
|
||||
p = make([]byte, pLen)
|
||||
q = make([]byte, qLen)
|
||||
decrypted = make([]byte, dataLen)
|
||||
encData = make([]byte, dataLen)
|
||||
salt = make([]byte, saltLen)
|
||||
|
||||
// Import salt
|
||||
if s, err := hex.DecodeString("07d4b07c0b128348916488008d6e130b"); err != nil {
|
||||
@@ -474,11 +491,64 @@ func main() {
|
||||
encData = b
|
||||
}
|
||||
|
||||
// RSA keys
|
||||
// This is used to validate decrypted keys.
|
||||
if rk, err := hex.DecodeString(""); err != nil {
|
||||
// Bcrypt_pbkdf derivation (used for deriving decryption key for AES encrypted private key)
|
||||
if k, err := bcrypt_pbkdf.Key([]byte(passphrase), salt, rounds, 32+16); err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
} else {
|
||||
key = rk
|
||||
bcryptKey = k
|
||||
}
|
||||
realBcryptKey := bcryptKey[0:32]
|
||||
realIV := bcryptKey[32:]
|
||||
|
||||
// N
|
||||
if b, err := hex.DecodeString(
|
||||
"00b7cec04601ce2a12f0c924cb9a30eb990066812cb14369193f30b2b9fdd4af" +
|
||||
"cb300c918f2a77d64410f3617ae7c8ca318c257d3c4df4e2c4108bbbe93a8689" +
|
||||
"4ba14b3575f2f72150bc381dcbfb742c7a196866fd3184ace96761adda0fc299" +
|
||||
"2f6c866d7569919fc22d9c4bf0de405a8c76d519aa2a5329dc6825777229a5d0" +
|
||||
"b753a7825a89b95275f9c025e215343c6c88cd6690a221f8ae9ef675ee464dc7" +
|
||||
"d118da410507ea5d6b6489dd60afd8a6646492db3e279f1a78240db8abbda6c5" +
|
||||
"0714c9636650a72081e7fa5d472c1428b07eae5d15b64ea1e2a7508512fe9ab6" +
|
||||
"55f86a313486d3cca1dd8e90acc5c9fba4d6e767507fbab9f3a7f68c748142af" +
|
||||
"2a3701d31a8a9b7511958aa77187ba702ed934d385afcee42380e95e0e7e9bc0" +
|
||||
"f4d23367fc770374167b7f0926fb6fdb6d05aad1cfd191824845b014e18153bf" +
|
||||
"0d1d3c3b1fadbb25a3f1d151f9b684633d8c1690fcd8cad05aac2aeb23dbf19a" +
|
||||
"37e480a008910319c116d47bd924b39942543b88a0f6127952b2d8e1290f3029" +
|
||||
"f542aebe9c0c8e36cf3296865cd6643c8924d566ebf4971809399a1ac096fe1e" +
|
||||
"dc3b5f871bf5ef0b4d44e0ea27620d205142e0bfcf677b4db025532121a3f074" +
|
||||
"5aa4d0586331733257855a5cecbe3ac4403d04ff0cc0c58b7c04904b402125c2" +
|
||||
"bc2a63a20ebb309cc6f3e65db301a058b8dace07e71b38f3f3595433f69b198f" +
|
||||
"07",
|
||||
); err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
} else {
|
||||
n = b
|
||||
}
|
||||
|
||||
// Decrypter
|
||||
if a, err := aes.NewCipher(realBcryptKey); err != nil {
|
||||
fmt.Println(err)
|
||||
return
|
||||
} else {
|
||||
aesCtx = a
|
||||
}
|
||||
|
||||
// Actual cipher setup. AES256-CTR
|
||||
decryptor := cipher.NewCTR(aesCtx, realIV)
|
||||
decryptor.XORKeyStream(decrypted, encData)
|
||||
|
||||
// Print comparisons
|
||||
fmt.Printf("Salt: %v\n", hex.EncodeToString(salt))
|
||||
fmt.Printf("Bcrypt key: %v\n", hex.EncodeToString(bcryptKey))
|
||||
fmt.Printf("CRT: %v\n", hex.EncodeToString(crt))
|
||||
fmt.Printf("d: %v\n", hex.EncodeToString(d))
|
||||
fmt.Printf("n: %v\n", hex.EncodeToString(n))
|
||||
fmt.Printf("p: %v\n", hex.EncodeToString(p))
|
||||
fmt.Printf("q: %v\n", hex.EncodeToString(q))
|
||||
fmt.Printf("key: %v\n", key)
|
||||
// var aesCtx cipher.Block
|
||||
fmt.Printf("encData: %v\n", hex.EncodeToString(encData))
|
||||
fmt.Printf("Decrypted?: %v\n", hex.EncodeToString(decrypted))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user