Skip to content

base16 - [mainnet]

Functions

hex_char_to_u8

public fun hex_char_to_u8(c: u8): u8
Implementation
public fun hex_char_to_u8(c: u8): u8 {
if (c >= 48 && c <= 57) { // '0' to '9'
c - 48
} else if (c >= 65 && c <= 70) { // 'A' to 'F'
c - 55
} else if (c >= 97 && c <= 102) { // 'a' to 'f'
c - 87
} else {
abort 1
}
}

base16_utf8_to_vec_u8

public fun base16_utf8_to_vec_u8(str: vector<u8>): vector<u8>
Implementation
public fun base16_utf8_to_vec_u8(str: vector<u8>): vector<u8> {
let result = vector::empty<u8>();
let i = 0;
while (i < vector::length(&str)) {
let c1 = vector::borrow(&str, i);
let c2 = vector::borrow(&str, i + 1);
let byte = hex_char_to_u8(*c1) << 4 | hex_char_to_u8(*c2);
vector::push_back(&mut result, byte);
i = i + 2;
};
result
}

Specification

base16_utf8_to_vec_u8

public fun base16_utf8_to_vec_u8(str: vector<u8>): vector<u8>
pragma opaque;
ensures [abstract] result == spec_base16_utf8_to_vec_u8(str);
fun spec_base16_utf8_to_vec_u8(str: vector<u8>): vector<u8>;