Skip to content

Commit

Permalink
nvm: update crypto test
Browse files Browse the repository at this point in the history
  • Loading branch information
bibibong committed Jun 6, 2018
1 parent f85a91f commit df2aea9
Show file tree
Hide file tree
Showing 2 changed files with 88 additions and 6 deletions.
82 changes: 82 additions & 0 deletions account/manager_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,10 @@
package account

import (
"crypto/md5"
"fmt"
"testing"
"time"

"os"

Expand Down Expand Up @@ -252,6 +255,18 @@ func TestForCryptoJS(t *testing.T) {
input: "Nebulas is a next generation public blockchain, aiming for a continuously improving ecosystem.",
output: "4236aa9974eb7b9ddb0f7a7ed06d4bf3d9c0e386",
},

{
method: "md5",
input: "Nebulas is a next generation public blockchain, aiming for a continuously improving ecosystem.",
output: "9954125a33a380c3117269cff93f76a7",
},

{
method: "base64",
input: "Nebulas is a next generation public blockchain, aiming for a continuously improving ecosystem.",
output: "TmVidWxhcyBpcyBhIG5leHQgZ2VuZXJhdGlvbiBwdWJsaWMgYmxvY2tjaGFpbiwgYWltaW5nIGZvciBhIGNvbnRpbnVvdXNseSBpbXByb3ZpbmcgZWNvc3lzdGVtLg==",
},
}

for _, tt := range tests {
Expand All @@ -264,6 +279,11 @@ func TestForCryptoJS(t *testing.T) {
out = byteutils.Hex(hash.Sha3256([]byte(tt.input)))
case "ripemd160":
out = byteutils.Hex(hash.Ripemd160([]byte(tt.input)))
case "md5":
r := md5.Sum([]byte(tt.input))
out = byteutils.Hex(r[:])
case "base64":
out = string(hash.Base64Encode([]byte(tt.input)))
}
assert.Equal(t, tt.output, out)
})
Expand Down Expand Up @@ -305,3 +325,65 @@ func TestForCryptoJS(t *testing.T) {
err = os.Remove(acc.path)
assert.Nil(t, err)
}
func TestCryptoPerformance(t *testing.T) {
// test sha256
start := time.Now()
out := ""
for i := 0; i < 1000; i++ {
out = byteutils.Hex(hash.Sha256([]byte("Nebulas is a next generation public blockchain, aiming for a continuously improving ecosystem.")))
}
cost := time.Now().Sub(start).Nanoseconds()
fmt.Println("sha256", out, cost)

// test md5
start = time.Now()
for i := 0; i < 1000; i++ {
r := md5.Sum([]byte("Nebulas is a next generation public blockchain, aiming for a continuously improving ecosystem."))
out = byteutils.Hex(r[:])
}
cost = time.Now().Sub(start).Nanoseconds()
fmt.Println("md5", out, cost)

// test recover address

manager, _ := NewManager(nil)
addr, err := manager.NewAccount([]byte("passphrase"))
assert.Nil(t, err, "new address err")
err = manager.Unlock(addr, []byte("passphrase"), keystore.DefaultUnlockDuration)
assert.Nil(t, err, "unlock err")
key, err := manager.ks.GetUnlocked(addr.String())
assert.Nil(t, err, "get key err")

signature, err := crypto.NewSignature(1)
assert.Nil(t, err, "get signature err")

err = signature.InitSign(key.(keystore.PrivateKey))
assert.Nil(t, err, "init signature err")

data := hash.Sha3256([]byte("Nebulas is a next generation public blockchain, aiming for a continuously improving ecosystem."))
assert.Equal(t, "564733f9f3e139b925cfb1e7e50ba8581e9107b13e4213f2e4708d9c284be75b", byteutils.Hex(data))
signData, err := signature.Sign(data)
assert.Nil(t, err, "sign data err")
signHex := byteutils.Hex(signData)

// recover
rb, err := byteutils.FromHex(signHex)
assert.Nil(t, err, "from hex error")
rAddr, err := core.RecoverSignerFromSignature(keystore.Algorithm(1), data, rb)
start = time.Now()
for i := 0; i < 1000; i++ {
core.RecoverSignerFromSignature(keystore.Algorithm(1), data, rb)
}
cost = time.Now().Sub(start).Nanoseconds()
fmt.Println("recoverAddress", rAddr.String(), cost)

assert.Nil(t, err, "recover err")
assert.Equal(t, addr.String(), rAddr.String())

acc, err := manager.getAccount(addr)
assert.Nil(t, err, "get acc err")
err = manager.Remove(addr, []byte("passphrase"))
assert.Nil(t, err)
err = os.Remove(acc.path)
assert.Nil(t, err)
}
12 changes: 6 additions & 6 deletions nf/nvm/crypto.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ import (
//export Sha256Func
func Sha256Func(data *C.char, gasCnt *C.size_t) *C.char {
s := C.GoString(data)
*gasCnt = C.size_t(len(s) * 100)
*gasCnt = C.size_t(len(s) + 20000)

r := hash.Sha256([]byte(s))
return C.CString(byteutils.Hex(r))
Expand All @@ -45,7 +45,7 @@ func Sha256Func(data *C.char, gasCnt *C.size_t) *C.char {
//export Sha3256Func
func Sha3256Func(data *C.char, gasCnt *C.size_t) *C.char {
s := C.GoString(data)
*gasCnt = C.size_t(len(s) * 100)
*gasCnt = C.size_t(len(s) + 20000)

r := hash.Sha3256([]byte(s))
return C.CString(byteutils.Hex(r))
Expand All @@ -55,7 +55,7 @@ func Sha3256Func(data *C.char, gasCnt *C.size_t) *C.char {
//export Ripemd160Func
func Ripemd160Func(data *C.char, gasCnt *C.size_t) *C.char {
s := C.GoString(data)
*gasCnt = C.size_t(len(s) * 100)
*gasCnt = C.size_t(len(s) + 20000)

r := hash.Ripemd160([]byte(s))
return C.CString(byteutils.Hex(r))
Expand All @@ -67,7 +67,7 @@ func RecoverAddressFunc(alg int, data, sign *C.char, gasCnt *C.size_t) *C.char {
d := C.GoString(data)
s := C.GoString(sign)

*gasCnt = C.size_t(1000)
*gasCnt = C.size_t(20000)

plain, err := byteutils.FromHex(d)
if err != nil {
Expand Down Expand Up @@ -107,7 +107,7 @@ func RecoverAddressFunc(alg int, data, sign *C.char, gasCnt *C.size_t) *C.char {
//export Md5Func
func Md5Func(data *C.char, gasCnt *C.size_t) *C.char {
s := C.GoString(data)
*gasCnt = C.size_t(len(s) * 100)
*gasCnt = C.size_t(len(s) + 6000)

r := md5.Sum([]byte(s))
return C.CString(byteutils.Hex(r[:]))
Expand All @@ -117,7 +117,7 @@ func Md5Func(data *C.char, gasCnt *C.size_t) *C.char {
//export Base64Func
func Base64Func(data *C.char, gasCnt *C.size_t) *C.char {
s := C.GoString(data)
*gasCnt = C.size_t(1000 + len(s))
*gasCnt = C.size_t(len(s) + 3000)

r := hash.Base64Encode([]byte(s))
return C.CString(string(r))
Expand Down

0 comments on commit df2aea9

Please sign in to comment.