Skip to content

Instantly share code, notes, and snippets.

@adria0
Created October 19, 2018 10:22
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save adria0/6dafa4015a53fa93650babd2c9a2fb15 to your computer and use it in GitHub Desktop.
Save adria0/6dafa4015a53fa93650babd2c9a2fb15 to your computer and use it in GitHub Desktop.
ruby go interop
require 'openssl'
require 'base64'
require 'json'
key_pair = OpenSSL::PKey::RSA.new(2048)
public_key, private_key = key_pair.public_key.export, key_pair.export
puts public_key
puts private_key
raw_private_key = private_key
content = "patata"
from = "juan"
json = [content, from].to_json
puts "json="+json
plaintext = Digest::SHA256.hexdigest(json)
puts "plaintext=" + plaintext
private_key = OpenSSL::PKey::RSA.new(raw_private_key)
puts "signature=" + Base64.encode64(private_key.private_encrypt(plaintext))
package main
import (
"crypto"
"crypto/rsa"
"crypto/sha256"
"crypto/x509"
"encoding/base64"
"encoding/hex"
"encoding/json"
"encoding/pem"
"errors"
"fmt"
)
var pbkpem = `
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwBxH2QXuIXmHKQydAzGi
GimS4UZLx9RqU7/m5wRoPWlURcge3CLCcVZREGRer7Lrb6iPpZYvHUSqEPmYKOOO
Haujp2X9mYONzag8Hvh8j6t/boedsyNFq/WQfcyT22TqIPW83pRIOMzjZvgrjdxp
ZkwzXbVu+/rwHZJWDvF7zQyBxd/lldy0xjS/Hqlk/7bbZBpGpn+UGkl/STN0Xg6j
bKdGWLau/Bf8WMbdbu+TMlNMhq4sK/8XgaEs/waCLO1yRT5/ypJbvT2NT7mcI1/4
QE066Qnp2k2cn+ISStcemf8uoMIOXIQ6Bqu4GcdmQARW1/3keThhZDckERbiDxgI
JQIDAQAB
-----END PUBLIC KEY-----
`
var pvkpem = `
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAwBxH2QXuIXmHKQydAzGiGimS4UZLx9RqU7/m5wRoPWlURcge
3CLCcVZREGRer7Lrb6iPpZYvHUSqEPmYKOOOHaujp2X9mYONzag8Hvh8j6t/boed
syNFq/WQfcyT22TqIPW83pRIOMzjZvgrjdxpZkwzXbVu+/rwHZJWDvF7zQyBxd/l
ldy0xjS/Hqlk/7bbZBpGpn+UGkl/STN0Xg6jbKdGWLau/Bf8WMbdbu+TMlNMhq4s
K/8XgaEs/waCLO1yRT5/ypJbvT2NT7mcI1/4QE066Qnp2k2cn+ISStcemf8uoMIO
XIQ6Bqu4GcdmQARW1/3keThhZDckERbiDxgIJQIDAQABAoIBAQCtHw80KN7utaiy
ulYoUasGLp7ZedLCss5ayJ3ZY6RYaznxZKVCteRJ5IJK5lhZtz/psJo6m3u7wWwM
vhB8EIy6ejmRmhyOIfpA8bG0KzN8+QxuW7Img8u+ah4a76fy1x8SMsFQR4pJ/YGU
AmKlhZJKCLNlaCIq23lU/NGmx8FMBsBvTLwl/1Rd/W9wLMswS/XO1TMM2XAbWnYX
P7hl70lWyCiXaDTXgstzHLM+8j2xJlUtfPIlJ75bkaWZCDKxKDdNGNxsB4xQkuRx
3X/fNv/QUciHV+FbI1qmjxfXZZeU02f55cHVdIWiCBHBusEu4GInsdCIHVv+WnhH
5uZ0eJVFAoGBAOSBagEr6PTLhLFxjZPUJBfTb/U9GRw8iKuqeBZIMHvJcQOd7s7h
FZuGlNlUxDuUg5j1jb3fyUQhIg4YTvRc2E+Jhi5RNe+tjU1K+LbDWp+UpGr9WUQg
Vv5aqpyhRRhy1lYi0IsM9bbE6cVSSfhnvBFa3e03OhsCraVYD1oubdfHAoGBANc5
zQaAsahvtySfBj3wbArEVZN+Q+C/j1g+hDt5iSWYe0Z7IJiOABtl0v2E+RIQuQaF
FIVU4mYZXopvxDd3D/HzJX0L4qFIFNOrth3q34xRBg9PXQ4TB1RIWyUhk93Jcuds
a2m/mN4pJHZ77RgmhBOSFCTvxizpb1q1eoKWdJizAoGAVK48+YgrQaS2XQfm3rTM
V2QM5oYo6xTn1S5MaH2CMi2ZyyxZFqPFXSiHuu619hp4llPRnl7zeGMK+sw5XkeW
BgvCBSIladgYOF+jQh+tUtxD/j47OYr+ki5Jcdg2AfR0x+EJBa7c1EmvFGgFb6AJ
yyiwe7tuthnM/ixfLB1uqXsCgYB/BECoZsjyI8QM28DeSwYoMIhkfC7o84RQSszV
ILu8sUmHZeDtx1fu01/6eEBZ1f6sB1v9+AOIx84QmzdMmHqTirCEJMCB+D06Umsv
Ks71S1ftLyQ2yyoXJoCL4E4YpOuoAkc96HH6IoO/XRGmoAxwVFSJG+xz0uwBt3pu
mQaEmwKBgQCOH9Ai+Fm/b1A+Roxb6eP4dboiyrlBnKgbvvv0yIcqDe/2sotHaKph
9ujMJ1GiVL1KyZBeCzo3URpjqj+svLAqLA4bEfAr7FL9XsHgv1cj2N9Q7o2Nv7q5
fKtlpjkWo6dEworKPRpUf/oJJjnyzNiO1JhtJlsd9EvuED1ihEg1Xw==
-----END RSA PRIVATE KEY-----
`
var jsonstr = `["patata","juan"]`
var plaintext = `48921be8bf4aef0e4192cf612df52cd88b3751ef54ab21d4a840bdd998a7b56e`
var signaturestr = `ed1QF7yekxCX7HMfYmgKC+dUNQokGkN6pZy3EaK4n8ggYQP7euUzA/XpiIqx
Tbz8wYXoaM98CrMdiUgLOGV01q+8lzZN1o30chuFhnIYdZrgykmbpCkyCsqK
WHYOe84fEbZUiabu66wsdBavLm9kUm4G2SmbwKpOOCNTzIZF1sriXrbONS2W
EvI/B5P+LW6SanJWt65v4JCfERSLpuXcQmNKUwjvMLgBrvOwr3zG4CMmR0St
uBwn8PYVN2BUGl2pgZMnfziahX4lJW3pQ6H/B+n6NSVYYWBCIUyK5h2qrZ0E
v5hTYzi8+n6zPEKpWDpL2c2MEEdNBjk8hf/prKHUvw==`
var content = "patata"
var from = "juan"
func assert(err error) {
if err != nil {
panic(err)
}
}
func main() {
block, _ := pem.Decode([]byte(pvkpem))
if block == nil {
panic(errors.New("block is nil"))
}
pvk, err := x509.ParsePKCS1PrivateKey(block.Bytes)
assert(err)
block, _ = pem.Decode([]byte(pbkpem))
if block == nil {
panic(errors.New("block is nil"))
}
pbkobj, err := x509.ParsePKIXPublicKey(block.Bytes)
assert(err)
pbk := pbkobj.(*rsa.PublicKey)
msg := []string{content, from}
jsonbytes, err := json.Marshal(msg)
assert(err)
fmt.Println(pvk)
fmt.Println(pbk)
fmt.Println(string(jsonbytes))
h := sha256.Sum256(jsonbytes)
hhex := []byte(hex.EncodeToString(h[:]))
fmt.Println(hex.EncodeToString(h[:]))
signature, err := rsa.SignPKCS1v15(nil, pvk, crypto.Hash(0), hhex[:])
assert(err)
fmt.Println(base64.StdEncoding.EncodeToString(signature))
/*
signature, err := base64.StdEncoding.DecodeString(signaturestr)
assert(err)
assert(rsa.VerifyPKCS1v15(pbk, crypto.SHA256, hhex , signature))
*/
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment