vlib: add `mut` for the first parameter of builtin.copy, arrays.copy and crypto (#13702)
parent
4c33003f86
commit
7231a3f135
|
@ -544,7 +544,7 @@ fn swap_nonoverlapping<T>(x_ &T, y_ &T, count int) {
|
||||||
// copy copies the `src` array elements to the `dst` array.
|
// copy copies the `src` array elements to the `dst` array.
|
||||||
// The number of the elements copied is the minimum of the length of both arrays.
|
// The number of the elements copied is the minimum of the length of both arrays.
|
||||||
// Returns the number of elements copied.
|
// Returns the number of elements copied.
|
||||||
pub fn copy<T>(dst []T, src []T) int {
|
pub fn copy<T>(mut dst []T, src []T) int {
|
||||||
min := if dst.len < src.len { dst.len } else { src.len }
|
min := if dst.len < src.len { dst.len } else { src.len }
|
||||||
if min > 0 {
|
if min > 0 {
|
||||||
blen := min * int(sizeof(T))
|
blen := min * int(sizeof(T))
|
||||||
|
|
|
@ -268,16 +268,16 @@ fn test_rotate_left_string() {
|
||||||
fn test_copy() {
|
fn test_copy() {
|
||||||
mut a := [1, 2, 3]
|
mut a := [1, 2, 3]
|
||||||
mut b := [4, 5, 6]
|
mut b := [4, 5, 6]
|
||||||
assert copy(b, a) == 3
|
assert copy(mut b, a) == 3
|
||||||
assert b == [1, 2, 3]
|
assert b == [1, 2, 3]
|
||||||
// check independent copies
|
// check independent copies
|
||||||
b[0] = 99
|
b[0] = 99
|
||||||
assert a[0] == 1
|
assert a[0] == 1
|
||||||
// check longer src
|
// check longer src
|
||||||
b << 7
|
b << 7
|
||||||
assert copy(a, b) == 3
|
assert copy(mut a, b) == 3
|
||||||
assert a == [99, 2, 3]
|
assert a == [99, 2, 3]
|
||||||
// check longer dst
|
// check longer dst
|
||||||
assert copy(b, [8, 9]) == 2
|
assert copy(mut b, [8, 9]) == 2
|
||||||
assert b == [8, 9, 3, 7]
|
assert b == [8, 9, 3, 7]
|
||||||
}
|
}
|
||||||
|
|
|
@ -816,7 +816,7 @@ pub fn (b []byte) hex() string {
|
||||||
// Returns the number of elements copied.
|
// Returns the number of elements copied.
|
||||||
// NOTE: This is not an `array` method. It is a function that takes two arrays of bytes.
|
// NOTE: This is not an `array` method. It is a function that takes two arrays of bytes.
|
||||||
// See also: `arrays.copy`.
|
// See also: `arrays.copy`.
|
||||||
pub fn copy(dst []byte, src []byte) int {
|
pub fn copy(mut dst []byte, src []byte) int {
|
||||||
min := if dst.len < src.len { dst.len } else { src.len }
|
min := if dst.len < src.len { dst.len } else { src.len }
|
||||||
if min > 0 {
|
if min > 0 {
|
||||||
unsafe { vmemmove(&byte(dst.data), src.data, min) }
|
unsafe { vmemmove(&byte(dst.data), src.data, min) }
|
||||||
|
|
|
@ -151,13 +151,13 @@ fn (mut h Hashed) hash_byte() []byte {
|
||||||
}
|
}
|
||||||
arr[n] = `$`
|
arr[n] = `$`
|
||||||
n++
|
n++
|
||||||
copy(arr[n..], '${int(h.cost):02}'.bytes())
|
copy(mut arr[n..], '${int(h.cost):02}'.bytes())
|
||||||
n += 2
|
n += 2
|
||||||
arr[n] = `$`
|
arr[n] = `$`
|
||||||
n++
|
n++
|
||||||
copy(arr[n..], h.salt)
|
copy(mut arr[n..], h.salt)
|
||||||
n += bcrypt.encoded_salt_size
|
n += bcrypt.encoded_salt_size
|
||||||
copy(arr[n..], h.hash)
|
copy(mut arr[n..], h.hash)
|
||||||
n += bcrypt.encoded_hash_size
|
n += bcrypt.encoded_hash_size
|
||||||
res := arr[..n].clone()
|
res := arr[..n].clone()
|
||||||
return res
|
return res
|
||||||
|
|
|
@ -21,7 +21,7 @@ fn test_aes_cbc() {
|
||||||
|
|
||||||
fn aes_cbc_en(mut src []byte, key []byte, iv []byte) {
|
fn aes_cbc_en(mut src []byte, key []byte, iv []byte) {
|
||||||
block := aes.new_cipher(key)
|
block := aes.new_cipher(key)
|
||||||
mode := cipher.new_cbc(block, iv)
|
mut mode := cipher.new_cbc(block, iv)
|
||||||
mode.encrypt_blocks(mut src, src.clone())
|
mode.encrypt_blocks(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ fn test_aes_cfb() {
|
||||||
|
|
||||||
fn aes_cfb_en(mut src []byte, key []byte, iv []byte) {
|
fn aes_cfb_en(mut src []byte, key []byte, iv []byte) {
|
||||||
block := aes.new_cipher(key)
|
block := aes.new_cipher(key)
|
||||||
mode := cipher.new_cfb_encrypter(block, iv)
|
mut mode := cipher.new_cfb_encrypter(block, iv)
|
||||||
mode.xor_key_stream(mut src, src.clone())
|
mode.xor_key_stream(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ fn test_aes_ofb() {
|
||||||
|
|
||||||
fn aes_ofb_en(mut src []byte, key []byte, iv []byte) {
|
fn aes_ofb_en(mut src []byte, key []byte, iv []byte) {
|
||||||
block := aes.new_cipher(key)
|
block := aes.new_cipher(key)
|
||||||
mode := cipher.new_ofb(block, iv)
|
mut mode := cipher.new_ofb(block, iv)
|
||||||
mode.xor_key_stream(mut src, src.clone())
|
mode.xor_key_stream(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ pub fn new_cbc(b Block, iv []byte) Cbc {
|
||||||
|
|
||||||
// encrypt_blocks encrypts the blocks in `src_` to `dst_`.
|
// encrypt_blocks encrypts the blocks in `src_` to `dst_`.
|
||||||
// Please note: `dst_` is mutable for performance reasons.
|
// Please note: `dst_` is mutable for performance reasons.
|
||||||
pub fn (x &Cbc) encrypt_blocks(mut dst_ []byte, src_ []byte) {
|
pub fn (mut x Cbc) encrypt_blocks(mut dst_ []byte, src_ []byte) {
|
||||||
unsafe {
|
unsafe {
|
||||||
mut dst := *dst_
|
mut dst := *dst_
|
||||||
mut src := src_
|
mut src := src_
|
||||||
|
@ -69,7 +69,7 @@ pub fn (x &Cbc) encrypt_blocks(mut dst_ []byte, src_ []byte) {
|
||||||
dst = dst[x.block_size..]
|
dst = dst[x.block_size..]
|
||||||
}
|
}
|
||||||
// Save the iv for the next crypt_blocks call.
|
// Save the iv for the next crypt_blocks call.
|
||||||
copy(x.iv, iv)
|
copy(mut x.iv, iv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -94,7 +94,7 @@ pub fn (mut x Cbc) decrypt_blocks(mut dst []byte, src []byte) {
|
||||||
mut start := end - x.block_size
|
mut start := end - x.block_size
|
||||||
mut prev := start - x.block_size
|
mut prev := start - x.block_size
|
||||||
// Copy the last block of ciphertext in preparation as the new iv.
|
// Copy the last block of ciphertext in preparation as the new iv.
|
||||||
copy(x.tmp, src[start..end])
|
copy(mut x.tmp, src[start..end])
|
||||||
// Loop over all but the first block.
|
// Loop over all but the first block.
|
||||||
for start > 0 {
|
for start > 0 {
|
||||||
src_chunk := src[start..end]
|
src_chunk := src[start..end]
|
||||||
|
@ -113,9 +113,9 @@ pub fn (mut x Cbc) decrypt_blocks(mut dst []byte, src []byte) {
|
||||||
x.tmp = x.iv
|
x.tmp = x.iv
|
||||||
}
|
}
|
||||||
|
|
||||||
fn (x &Cbc) set_iv(iv []byte) {
|
fn (mut x Cbc) set_iv(iv []byte) {
|
||||||
if iv.len != x.iv.len {
|
if iv.len != x.iv.len {
|
||||||
panic('cipher: incorrect length IV')
|
panic('cipher: incorrect length IV')
|
||||||
}
|
}
|
||||||
copy(x.iv, iv)
|
copy(mut x.iv, iv)
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,20 +39,18 @@ fn new_cfb(b Block, iv []byte, decrypt bool) Cfb {
|
||||||
if iv.len != block_size {
|
if iv.len != block_size {
|
||||||
panic('cipher.new_cfb: IV length must be equal block size')
|
panic('cipher.new_cfb: IV length must be equal block size')
|
||||||
}
|
}
|
||||||
x := Cfb{
|
mut x := Cfb{
|
||||||
b: b
|
b: b
|
||||||
out: []byte{len: b.block_size}
|
out: []byte{len: b.block_size}
|
||||||
next: []byte{len: b.block_size}
|
next: []byte{len: b.block_size}
|
||||||
out_used: block_size
|
out_used: block_size
|
||||||
decrypt: decrypt
|
decrypt: decrypt
|
||||||
}
|
}
|
||||||
|
copy(mut x.next, iv)
|
||||||
copy(x.next, iv)
|
|
||||||
|
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (x &Cfb) xor_key_stream(mut dst_ []byte, src_ []byte) {
|
pub fn (mut x Cfb) xor_key_stream(mut dst_ []byte, src_ []byte) {
|
||||||
unsafe {
|
unsafe {
|
||||||
mut dst := *dst_
|
mut dst := *dst_
|
||||||
mut src := src_
|
mut src := src_
|
||||||
|
@ -71,12 +69,12 @@ pub fn (x &Cfb) xor_key_stream(mut dst_ []byte, src_ []byte) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if x.decrypt {
|
if x.decrypt {
|
||||||
copy(x.next[x.out_used..], src)
|
copy(mut x.next[x.out_used..], src)
|
||||||
}
|
}
|
||||||
|
|
||||||
n := xor_bytes(mut dst, src, x.out[x.out_used..])
|
n := xor_bytes(mut dst, src, x.out[x.out_used..])
|
||||||
if !x.decrypt {
|
if !x.decrypt {
|
||||||
copy(x.next[x.out_used..], dst)
|
copy(mut x.next[x.out_used..], dst)
|
||||||
}
|
}
|
||||||
dst = dst[n..]
|
dst = dst[n..]
|
||||||
src = src[n..]
|
src = src[n..]
|
||||||
|
|
|
@ -50,6 +50,6 @@ interface BlockMode {
|
||||||
|
|
||||||
// fn dup(p []byte) []byte {
|
// fn dup(p []byte) []byte {
|
||||||
// q := make([]byte, p.len)
|
// q := make([]byte, p.len)
|
||||||
// copy(q, p)
|
// copy(mut q, p)
|
||||||
// return q
|
// return q
|
||||||
// }
|
// }
|
||||||
|
|
|
@ -31,7 +31,7 @@ fn test_des_cbc() {
|
||||||
|
|
||||||
fn des_cbc_en(mut src []byte, key []byte, iv []byte) {
|
fn des_cbc_en(mut src []byte, key []byte, iv []byte) {
|
||||||
block := des.new_cipher(key)
|
block := des.new_cipher(key)
|
||||||
mode := cipher.new_cbc(block, iv)
|
mut mode := cipher.new_cbc(block, iv)
|
||||||
mode.encrypt_blocks(mut src, src.clone())
|
mode.encrypt_blocks(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ fn des_cbc_de(mut src []byte, key []byte, iv []byte) {
|
||||||
|
|
||||||
fn triple_des_cbc_en(mut src []byte, key []byte, iv []byte) {
|
fn triple_des_cbc_en(mut src []byte, key []byte, iv []byte) {
|
||||||
block := des.new_triple_des_cipher(key)
|
block := des.new_triple_des_cipher(key)
|
||||||
mode := cipher.new_cbc(block, iv)
|
mut mode := cipher.new_cbc(block, iv)
|
||||||
mode.encrypt_blocks(mut src, src.clone())
|
mode.encrypt_blocks(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@ fn test_des_cfb() {
|
||||||
|
|
||||||
fn des_cfb_en(mut src []byte, key []byte, iv []byte) {
|
fn des_cfb_en(mut src []byte, key []byte, iv []byte) {
|
||||||
block := des.new_cipher(key)
|
block := des.new_cipher(key)
|
||||||
mode := cipher.new_cfb_encrypter(block, iv)
|
mut mode := cipher.new_cfb_encrypter(block, iv)
|
||||||
mode.xor_key_stream(mut src, src.clone())
|
mode.xor_key_stream(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,12 +43,12 @@ fn des_cfb_de(mut src []byte, key []byte, iv []byte) {
|
||||||
|
|
||||||
fn triple_des_cfb_en(mut src []byte, key []byte, iv []byte) {
|
fn triple_des_cfb_en(mut src []byte, key []byte, iv []byte) {
|
||||||
block := des.new_triple_des_cipher(key)
|
block := des.new_triple_des_cipher(key)
|
||||||
mode := cipher.new_cfb_encrypter(block, iv)
|
mut mode := cipher.new_cfb_encrypter(block, iv)
|
||||||
mode.xor_key_stream(mut src, src.clone())
|
mode.xor_key_stream(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn triple_des_cfb_de(mut src []byte, key []byte, iv []byte) {
|
fn triple_des_cfb_de(mut src []byte, key []byte, iv []byte) {
|
||||||
block := des.new_triple_des_cipher(key)
|
block := des.new_triple_des_cipher(key)
|
||||||
mode := cipher.new_cfb_decrypter(block, iv)
|
mut mode := cipher.new_cfb_decrypter(block, iv)
|
||||||
mode.xor_key_stream(mut src, src.clone())
|
mode.xor_key_stream(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,7 +31,7 @@ fn test_des_ofb() {
|
||||||
|
|
||||||
fn des_ofb_en(mut src []byte, key []byte, iv []byte) {
|
fn des_ofb_en(mut src []byte, key []byte, iv []byte) {
|
||||||
block := des.new_cipher(key)
|
block := des.new_cipher(key)
|
||||||
mode := cipher.new_ofb(block, iv)
|
mut mode := cipher.new_ofb(block, iv)
|
||||||
mode.xor_key_stream(mut src, src.clone())
|
mode.xor_key_stream(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,7 +43,7 @@ fn des_ofb_de(mut src []byte, key []byte, iv []byte) {
|
||||||
|
|
||||||
fn triple_des_ofb_en(mut src []byte, key []byte, iv []byte) {
|
fn triple_des_ofb_en(mut src []byte, key []byte, iv []byte) {
|
||||||
block := des.new_triple_des_cipher(key)
|
block := des.new_triple_des_cipher(key)
|
||||||
mode := cipher.new_ofb(block, iv)
|
mut mode := cipher.new_ofb(block, iv)
|
||||||
mode.xor_key_stream(mut src, src.clone())
|
mode.xor_key_stream(mut src, src.clone())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,19 +25,17 @@ pub fn new_ofb(b Block, iv []byte) Ofb {
|
||||||
if iv.len != block_size {
|
if iv.len != block_size {
|
||||||
panic('cipher.new_ofb: IV length must be equal block size')
|
panic('cipher.new_ofb: IV length must be equal block size')
|
||||||
}
|
}
|
||||||
x := Ofb{
|
mut x := Ofb{
|
||||||
b: b
|
b: b
|
||||||
out: []byte{len: b.block_size}
|
out: []byte{len: b.block_size}
|
||||||
next: []byte{len: b.block_size}
|
next: []byte{len: b.block_size}
|
||||||
out_used: block_size
|
out_used: block_size
|
||||||
}
|
}
|
||||||
|
copy(mut x.next, iv)
|
||||||
copy(x.next, iv)
|
|
||||||
|
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (x &Ofb) xor_key_stream(mut dst_ []byte, src_ []byte) {
|
pub fn (mut x Ofb) xor_key_stream(mut dst_ []byte, src_ []byte) {
|
||||||
unsafe {
|
unsafe {
|
||||||
mut dst := *dst_
|
mut dst := *dst_
|
||||||
mut src := src_
|
mut src := src_
|
||||||
|
@ -55,7 +53,7 @@ pub fn (x &Ofb) xor_key_stream(mut dst_ []byte, src_ []byte) {
|
||||||
x.out_used = 0
|
x.out_used = 0
|
||||||
}
|
}
|
||||||
|
|
||||||
copy(x.next, x.out)
|
copy(mut x.next, x.out)
|
||||||
|
|
||||||
n := xor_bytes(mut dst, src, x.out)
|
n := xor_bytes(mut dst, src, x.out)
|
||||||
dst = dst[n..]
|
dst = dst[n..]
|
||||||
|
|
|
@ -32,7 +32,7 @@ pub type PrivateKey = []byte
|
||||||
// RFC 8032's private keys correspond to seeds in this module.
|
// RFC 8032's private keys correspond to seeds in this module.
|
||||||
pub fn (priv PrivateKey) seed() []byte {
|
pub fn (priv PrivateKey) seed() []byte {
|
||||||
mut seed := []byte{len: ed25519.seed_size}
|
mut seed := []byte{len: ed25519.seed_size}
|
||||||
copy(seed, priv[..32])
|
copy(mut seed, priv[..32])
|
||||||
return seed
|
return seed
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ pub fn (priv PrivateKey) seed() []byte {
|
||||||
pub fn (priv PrivateKey) public_key() PublicKey {
|
pub fn (priv PrivateKey) public_key() PublicKey {
|
||||||
assert priv.len == ed25519.private_key_size
|
assert priv.len == ed25519.private_key_size
|
||||||
mut publickey := []byte{len: ed25519.public_key_size}
|
mut publickey := []byte{len: ed25519.public_key_size}
|
||||||
copy(publickey, priv[32..])
|
copy(mut publickey, priv[32..])
|
||||||
return PublicKey(publickey)
|
return PublicKey(publickey)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -62,11 +62,11 @@ pub fn (priv PrivateKey) sign(message []byte) ?[]byte {
|
||||||
// sign`signs the message with privatekey and returns a signature
|
// sign`signs the message with privatekey and returns a signature
|
||||||
pub fn sign(privatekey PrivateKey, message []byte) ?[]byte {
|
pub fn sign(privatekey PrivateKey, message []byte) ?[]byte {
|
||||||
mut signature := []byte{len: ed25519.signature_size}
|
mut signature := []byte{len: ed25519.signature_size}
|
||||||
sign_generic(signature, privatekey, message) ?
|
sign_generic(mut signature, privatekey, message) ?
|
||||||
return signature
|
return signature
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sign_generic(signature []byte, privatekey []byte, message []byte) ? {
|
fn sign_generic(mut signature []byte, privatekey []byte, message []byte) ? {
|
||||||
if privatekey.len != ed25519.private_key_size {
|
if privatekey.len != ed25519.private_key_size {
|
||||||
panic('ed25519: bad private key length: $privatekey.len')
|
panic('ed25519: bad private key length: $privatekey.len')
|
||||||
}
|
}
|
||||||
|
@ -103,8 +103,8 @@ fn sign_generic(signature []byte, privatekey []byte, message []byte) ? {
|
||||||
mut ss := edwards25519.new_scalar()
|
mut ss := edwards25519.new_scalar()
|
||||||
ss.multiply_add(k, s, r)
|
ss.multiply_add(k, s, r)
|
||||||
|
|
||||||
copy(signature[..32], rr.bytes())
|
copy(mut signature[..32], rr.bytes())
|
||||||
copy(signature[32..], ss.bytes())
|
copy(mut signature[32..], ss.bytes())
|
||||||
}
|
}
|
||||||
|
|
||||||
// verify reports whether sig is a valid signature of message by publickey.
|
// verify reports whether sig is a valid signature of message by publickey.
|
||||||
|
@ -148,8 +148,8 @@ pub fn generate_key() ?(PublicKey, PrivateKey) {
|
||||||
mut seed := rand.bytes(ed25519.seed_size) ?
|
mut seed := rand.bytes(ed25519.seed_size) ?
|
||||||
|
|
||||||
privatekey := new_key_from_seed(seed)
|
privatekey := new_key_from_seed(seed)
|
||||||
publickey := []byte{len: ed25519.public_key_size}
|
mut publickey := []byte{len: ed25519.public_key_size}
|
||||||
copy(publickey, privatekey[32..])
|
copy(mut publickey, privatekey[32..])
|
||||||
|
|
||||||
return publickey, privatekey
|
return publickey, privatekey
|
||||||
}
|
}
|
||||||
|
@ -158,12 +158,12 @@ pub fn generate_key() ?(PublicKey, PrivateKey) {
|
||||||
// correspond to seeds in this module
|
// correspond to seeds in this module
|
||||||
pub fn new_key_from_seed(seed []byte) PrivateKey {
|
pub fn new_key_from_seed(seed []byte) PrivateKey {
|
||||||
// Outline the function body so that the returned key can be stack-allocated.
|
// Outline the function body so that the returned key can be stack-allocated.
|
||||||
privatekey := []byte{len: ed25519.private_key_size}
|
mut privatekey := []byte{len: ed25519.private_key_size}
|
||||||
new_key_from_seed_generic(privatekey, seed)
|
new_key_from_seed_generic(mut privatekey, seed)
|
||||||
return PrivateKey(privatekey)
|
return PrivateKey(privatekey)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new_key_from_seed_generic(privatekey []byte, seed []byte) {
|
fn new_key_from_seed_generic(mut privatekey []byte, seed []byte) {
|
||||||
if seed.len != ed25519.seed_size {
|
if seed.len != ed25519.seed_size {
|
||||||
panic('ed25519: bad seed length: $seed.len')
|
panic('ed25519: bad seed length: $seed.len')
|
||||||
}
|
}
|
||||||
|
@ -176,6 +176,6 @@ fn new_key_from_seed_generic(privatekey []byte, seed []byte) {
|
||||||
|
|
||||||
mut publickey := aa.bytes()
|
mut publickey := aa.bytes()
|
||||||
|
|
||||||
copy(privatekey, seed)
|
copy(mut privatekey, seed)
|
||||||
copy(privatekey[32..], publickey)
|
copy(mut privatekey[32..], publickey)
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,8 +97,8 @@ fn works_check_on_sign_input_string(item string) bool {
|
||||||
|
|
||||||
sig = sig[..ed25519.signature_size]
|
sig = sig[..ed25519.signature_size]
|
||||||
mut priv := []byte{len: ed25519.private_key_size}
|
mut priv := []byte{len: ed25519.private_key_size}
|
||||||
copy(priv[..], privbytes)
|
copy(mut priv[..], privbytes)
|
||||||
copy(priv[32..], pubkey)
|
copy(mut priv[32..], pubkey)
|
||||||
|
|
||||||
sig2 := ed25519.sign(priv[..], msg) or { panic(err.msg) }
|
sig2 := ed25519.sign(priv[..], msg) or { panic(err.msg) }
|
||||||
if sig != sig2[..] {
|
if sig != sig2[..] {
|
||||||
|
@ -182,8 +182,8 @@ fn test_input_from_djb_ed25519_crypto_sign_input_without_syncpool() ? {
|
||||||
|
|
||||||
sig = sig[..signature_size]
|
sig = sig[..signature_size]
|
||||||
mut priv := []byte{len: ed25519.private_key_size}
|
mut priv := []byte{len: ed25519.private_key_size}
|
||||||
copy(priv[..], privbytes)
|
copy(mut priv[..], privbytes)
|
||||||
copy(priv[32..], pubkey)
|
copy(mut priv[32..], pubkey)
|
||||||
|
|
||||||
sig2 := ed25519.sign(priv[..], msg) ?
|
sig2 := ed25519.sign(priv[..], msg) ?
|
||||||
assert sig == sig2[..]
|
assert sig == sig2[..]
|
||||||
|
|
|
@ -398,7 +398,7 @@ fn test_bytes_big_equivalence() ? {
|
||||||
mut buf := []byte{len: 32} // pad with zeroes
|
mut buf := []byte{len: 32} // pad with zeroes
|
||||||
fedtobig := fe1.to_big_integer()
|
fedtobig := fe1.to_big_integer()
|
||||||
mut fedbig_bytes, _ := fedtobig.bytes()
|
mut fedbig_bytes, _ := fedtobig.bytes()
|
||||||
copy(buf, fedbig_bytes) // does not need to do swap_endianness
|
copy(mut buf, fedbig_bytes) // does not need to do swap_endianness
|
||||||
|
|
||||||
assert fe.bytes() == buf && is_in_bounds(fe) && is_in_bounds(fe1)
|
assert fe.bytes() == buf && is_in_bounds(fe) && is_in_bounds(fe1)
|
||||||
// assert big_equivalence(inp, fe, fe1) == true
|
// assert big_equivalence(inp, fe, fe1) == true
|
||||||
|
|
|
@ -229,7 +229,7 @@ fn (mut v Point) bytes_generic(mut buf [32]byte) []byte {
|
||||||
fn copy_field_element(mut buf [32]byte, mut v Element) []byte {
|
fn copy_field_element(mut buf [32]byte, mut v Element) []byte {
|
||||||
// this fail in test
|
// this fail in test
|
||||||
/*
|
/*
|
||||||
copy(buf[..], v.bytes())
|
copy(mut buf[..], v.bytes())
|
||||||
return buf[..]
|
return buf[..]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
|
@ -91,7 +91,7 @@ pub fn (mut s Scalar) set_uniform_bytes(x []byte) ?Scalar {
|
||||||
return error('edwards25519: invalid set_uniform_bytes input length')
|
return error('edwards25519: invalid set_uniform_bytes input length')
|
||||||
}
|
}
|
||||||
mut wide_bytes := []byte{len: 64}
|
mut wide_bytes := []byte{len: 64}
|
||||||
copy(wide_bytes, x)
|
copy(mut wide_bytes, x)
|
||||||
// for i, item in x {
|
// for i, item in x {
|
||||||
// wide_bytes[i] = item
|
// wide_bytes[i] = item
|
||||||
//}
|
//}
|
||||||
|
@ -112,7 +112,7 @@ pub fn (mut s Scalar) set_canonical_bytes(x []byte) ?Scalar {
|
||||||
ss.s[i] = item
|
ss.s[i] = item
|
||||||
}
|
}
|
||||||
|
|
||||||
//_ := copy(ss.s[..], x) //its not working
|
//_ := copy(mut ss.s[..], x) //its not working
|
||||||
if !is_reduced(ss) {
|
if !is_reduced(ss) {
|
||||||
return error('invalid scalar encoding')
|
return error('invalid scalar encoding')
|
||||||
}
|
}
|
||||||
|
@ -162,7 +162,7 @@ pub fn (mut s Scalar) set_bytes_with_clamping(x []byte) ?Scalar {
|
||||||
}
|
}
|
||||||
|
|
||||||
mut wide_bytes := []byte{len: 64, cap: 64}
|
mut wide_bytes := []byte{len: 64, cap: 64}
|
||||||
copy(wide_bytes, x)
|
copy(mut wide_bytes, x)
|
||||||
// for i, item in x {
|
// for i, item in x {
|
||||||
// wide_bytes[i] = item
|
// wide_bytes[i] = item
|
||||||
//}
|
//}
|
||||||
|
@ -176,7 +176,7 @@ pub fn (mut s Scalar) set_bytes_with_clamping(x []byte) ?Scalar {
|
||||||
// bytes returns the canonical 32-byte little-endian encoding of s.
|
// bytes returns the canonical 32-byte little-endian encoding of s.
|
||||||
pub fn (mut s Scalar) bytes() []byte {
|
pub fn (mut s Scalar) bytes() []byte {
|
||||||
mut buf := []byte{len: 32}
|
mut buf := []byte{len: 32}
|
||||||
copy(buf, s.s[..])
|
copy(mut buf, s.s[..])
|
||||||
return buf
|
return buf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1116,7 +1116,7 @@ fn generate_scalar(size int) ?Scalar {
|
||||||
// using builtin rand.read([]buf)
|
// using builtin rand.read([]buf)
|
||||||
rand.read(mut s.s[..16])
|
rand.read(mut s.s[..16])
|
||||||
// buf := rand.read(s.s[..16].len) ?
|
// buf := rand.read(s.s[..16].len) ?
|
||||||
// copy(s.s[..16], buf)
|
// copy(mut s.s[..16], buf)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for i, item in buf {
|
for i, item in buf {
|
||||||
|
@ -1133,7 +1133,7 @@ fn generate_scalar(size int) ?Scalar {
|
||||||
// rand.Read(s.s[:16])
|
// rand.Read(s.s[:16])
|
||||||
rand.read(mut s.s[..16])
|
rand.read(mut s.s[..16])
|
||||||
// buf := rand.read(s.s[..16].len) ?
|
// buf := rand.read(s.s[..16].len) ?
|
||||||
// copy(s.s[..16], buf)
|
// copy(mut s.s[..16], buf)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for i, item in buf {
|
for i, item in buf {
|
||||||
|
@ -1149,7 +1149,7 @@ fn generate_scalar(size int) ?Scalar {
|
||||||
// rand.Read(s.s[:])
|
// rand.Read(s.s[:])
|
||||||
rand.read(mut s.s[..])
|
rand.read(mut s.s[..])
|
||||||
// buf := crand.read(s.s.len) ?
|
// buf := crand.read(s.s.len) ?
|
||||||
// copy(s.s[..], buf)
|
// copy(mut s.s[..], buf)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
for i, item in buf {
|
for i, item in buf {
|
||||||
|
|
|
@ -58,7 +58,7 @@ pub fn (mut d Digest) write(p_ []byte) ?int {
|
||||||
nn := p.len
|
nn := p.len
|
||||||
d.len += u64(nn)
|
d.len += u64(nn)
|
||||||
if d.nx > 0 {
|
if d.nx > 0 {
|
||||||
n := copy(d.x[d.nx..], p)
|
n := copy(mut d.x[d.nx..], p)
|
||||||
d.nx += n
|
d.nx += n
|
||||||
if d.nx == md5.block_size {
|
if d.nx == md5.block_size {
|
||||||
block(mut d, d.x)
|
block(mut d, d.x)
|
||||||
|
@ -80,7 +80,7 @@ pub fn (mut d Digest) write(p_ []byte) ?int {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p.len > 0 {
|
if p.len > 0 {
|
||||||
d.nx = copy(d.x, p)
|
d.nx = copy(mut d.x, p)
|
||||||
}
|
}
|
||||||
return nn
|
return nn
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ pub fn (mut d Digest) write(p_ []byte) ?int {
|
||||||
mut p := p_
|
mut p := p_
|
||||||
d.len += u64(nn)
|
d.len += u64(nn)
|
||||||
if d.nx > 0 {
|
if d.nx > 0 {
|
||||||
n := copy(d.x[d.nx..], p)
|
n := copy(mut d.x[d.nx..], p)
|
||||||
d.nx += n
|
d.nx += n
|
||||||
if d.nx == sha1.chunk {
|
if d.nx == sha1.chunk {
|
||||||
block(mut d, d.x)
|
block(mut d, d.x)
|
||||||
|
@ -84,7 +84,7 @@ pub fn (mut d Digest) write(p_ []byte) ?int {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p.len > 0 {
|
if p.len > 0 {
|
||||||
d.nx = copy(d.x, p)
|
d.nx = copy(mut d.x, p)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return nn
|
return nn
|
||||||
|
|
|
@ -96,7 +96,7 @@ pub fn (mut d Digest) write(p_ []byte) ?int {
|
||||||
nn := p.len
|
nn := p.len
|
||||||
d.len += u64(nn)
|
d.len += u64(nn)
|
||||||
if d.nx > 0 {
|
if d.nx > 0 {
|
||||||
n := copy(d.x[d.nx..], p)
|
n := copy(mut d.x[d.nx..], p)
|
||||||
d.nx += n
|
d.nx += n
|
||||||
if d.nx == sha256.chunk {
|
if d.nx == sha256.chunk {
|
||||||
block(mut d, d.x)
|
block(mut d, d.x)
|
||||||
|
@ -118,7 +118,7 @@ pub fn (mut d Digest) write(p_ []byte) ?int {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p.len > 0 {
|
if p.len > 0 {
|
||||||
d.nx = copy(d.x, p)
|
d.nx = copy(mut d.x, p)
|
||||||
}
|
}
|
||||||
return nn
|
return nn
|
||||||
}
|
}
|
||||||
|
@ -191,8 +191,8 @@ pub fn sum224(data []byte) []byte {
|
||||||
mut d := new224()
|
mut d := new224()
|
||||||
d.write(data) or { panic(err) }
|
d.write(data) or { panic(err) }
|
||||||
sum := d.checksum()
|
sum := d.checksum()
|
||||||
sum224 := []byte{len: sha256.size224}
|
mut sum224 := []byte{len: sha256.size224}
|
||||||
copy(sum224, sum[..sha256.size224])
|
copy(mut sum224, sum[..sha256.size224])
|
||||||
return sum224
|
return sum224
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,7 @@ pub fn (mut d Digest) write(p_ []byte) ?int {
|
||||||
nn := p.len
|
nn := p.len
|
||||||
d.len += u64(nn)
|
d.len += u64(nn)
|
||||||
if d.nx > 0 {
|
if d.nx > 0 {
|
||||||
n := copy(d.x[d.nx..], p)
|
n := copy(mut d.x[d.nx..], p)
|
||||||
d.nx += n
|
d.nx += n
|
||||||
if d.nx == sha512.chunk {
|
if d.nx == sha512.chunk {
|
||||||
block(mut d, d.x)
|
block(mut d, d.x)
|
||||||
|
@ -177,7 +177,7 @@ pub fn (mut d Digest) write(p_ []byte) ?int {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if p.len > 0 {
|
if p.len > 0 {
|
||||||
d.nx = copy(d.x, p)
|
d.nx = copy(mut d.x, p)
|
||||||
}
|
}
|
||||||
return nn
|
return nn
|
||||||
}
|
}
|
||||||
|
@ -258,8 +258,8 @@ pub fn sum384(data []byte) []byte {
|
||||||
mut d := new_digest(.sha384)
|
mut d := new_digest(.sha384)
|
||||||
d.write(data) or { panic(err) }
|
d.write(data) or { panic(err) }
|
||||||
sum := d.checksum()
|
sum := d.checksum()
|
||||||
sum384 := []byte{len: sha512.size384}
|
mut sum384 := []byte{len: sha512.size384}
|
||||||
copy(sum384, sum[..sha512.size384])
|
copy(mut sum384, sum[..sha512.size384])
|
||||||
return sum384
|
return sum384
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -268,8 +268,8 @@ pub fn sum512_224(data []byte) []byte {
|
||||||
mut d := new_digest(.sha512_224)
|
mut d := new_digest(.sha512_224)
|
||||||
d.write(data) or { panic(err) }
|
d.write(data) or { panic(err) }
|
||||||
sum := d.checksum()
|
sum := d.checksum()
|
||||||
sum224 := []byte{len: sha512.size224}
|
mut sum224 := []byte{len: sha512.size224}
|
||||||
copy(sum224, sum[..sha512.size224])
|
copy(mut sum224, sum[..sha512.size224])
|
||||||
return sum224
|
return sum224
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -278,8 +278,8 @@ pub fn sum512_256(data []byte) []byte {
|
||||||
mut d := new_digest(.sha512_256)
|
mut d := new_digest(.sha512_256)
|
||||||
d.write(data) or { panic(err) }
|
d.write(data) or { panic(err) }
|
||||||
sum := d.checksum()
|
sum := d.checksum()
|
||||||
sum256 := []byte{len: sha512.size256}
|
mut sum256 := []byte{len: sha512.size256}
|
||||||
copy(sum256, sum[..sha512.size256])
|
copy(mut sum256, sum[..sha512.size256])
|
||||||
return sum256
|
return sum256
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -47,7 +47,7 @@ pub fn new_alphabet(str string) ?Alphabet {
|
||||||
}
|
}
|
||||||
|
|
||||||
mut ret := Alphabet{}
|
mut ret := Alphabet{}
|
||||||
copy(ret.encode, str.bytes())
|
copy(mut ret.encode, str.bytes())
|
||||||
|
|
||||||
mut distinct := 0
|
mut distinct := 0
|
||||||
for i, b in ret.encode {
|
for i, b in ret.encode {
|
||||||
|
|
|
@ -47,7 +47,7 @@ pub fn (mut r BufferedReader) read(mut buf []byte) ?int {
|
||||||
return none
|
return none
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
read := copy(buf, r.buf[r.offset..r.len])
|
read := copy(mut buf, r.buf[r.offset..r.len])
|
||||||
if read == 0 {
|
if read == 0 {
|
||||||
return none
|
return none
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ fn (mut s StringReader) read(mut buf []byte) ?int {
|
||||||
}
|
}
|
||||||
mut howmany := imin(buf.len, s.text.len - s.place)
|
mut howmany := imin(buf.len, s.text.len - s.place)
|
||||||
xxx := s.text[s.place..s.place + howmany].bytes()
|
xxx := s.text[s.place..s.place + howmany].bytes()
|
||||||
read := copy(buf, xxx)
|
read := copy(mut buf, xxx)
|
||||||
s.place += read
|
s.place += read
|
||||||
return read
|
return read
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,7 +16,7 @@ fn (mut b Buf) read(mut buf []byte) ?int {
|
||||||
if !(b.i < b.bytes.len) {
|
if !(b.i < b.bytes.len) {
|
||||||
return none
|
return none
|
||||||
}
|
}
|
||||||
n := copy(buf, b.bytes[b.i..])
|
n := copy(mut buf, b.bytes[b.i..])
|
||||||
b.i += n
|
b.i += n
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@ fn (mut b Buf) read(mut buf []byte) ?int {
|
||||||
if !(b.i < b.bytes.len) {
|
if !(b.i < b.bytes.len) {
|
||||||
return none
|
return none
|
||||||
}
|
}
|
||||||
n := copy(buf, b.bytes[b.i..])
|
n := copy(mut buf, b.bytes[b.i..])
|
||||||
b.i += n
|
b.i += n
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
@ -48,7 +48,7 @@ fn (mut s StringReader) read(mut buf []byte) ?int {
|
||||||
if s.place >= s.text.len {
|
if s.place >= s.text.len {
|
||||||
return none
|
return none
|
||||||
}
|
}
|
||||||
read := copy(buf, s.text[s.place..].bytes())
|
read := copy(mut buf, s.text[s.place..].bytes())
|
||||||
s.place += read
|
s.place += read
|
||||||
return read
|
return read
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,7 @@ fn (mut s StringReader) read(mut buf []byte) ?int {
|
||||||
}
|
}
|
||||||
max_bytes := 100
|
max_bytes := 100
|
||||||
end := if s.place + max_bytes >= s.text.len { s.text.len } else { s.place + max_bytes }
|
end := if s.place + max_bytes >= s.text.len { s.text.len } else { s.place + max_bytes }
|
||||||
n := copy(buf, s.text[s.place..end].bytes())
|
n := copy(mut buf, s.text[s.place..end].bytes())
|
||||||
s.place += n
|
s.place += n
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
|
@ -274,7 +274,7 @@ fn escape(s string, mode EncodingMode) string {
|
||||||
required := s.len + 2 * hex_count
|
required := s.len + 2 * hex_count
|
||||||
mut t := []byte{len: required}
|
mut t := []byte{len: required}
|
||||||
if hex_count == 0 {
|
if hex_count == 0 {
|
||||||
copy(t, s.bytes())
|
copy(mut t, s.bytes())
|
||||||
for i in 0 .. s.len {
|
for i in 0 .. s.len {
|
||||||
if s[i] == ` ` {
|
if s[i] == ` ` {
|
||||||
t[i] = `+`
|
t[i] = `+`
|
||||||
|
|
|
@ -39,7 +39,7 @@ fn (mut b TestReader) read(mut buf []byte) ?int {
|
||||||
if !(b.i < b.bytes.len) {
|
if !(b.i < b.bytes.len) {
|
||||||
return none
|
return none
|
||||||
}
|
}
|
||||||
n := copy(buf, b.bytes[b.i..])
|
n := copy(mut buf, b.bytes[b.i..])
|
||||||
b.i += n
|
b.i += n
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue