package hmac import "smesh.lol/web/common/jsbridge/schnorr" const blockSize = 64 // Sum computes HMAC-SHA256(key, message). func Sum(key, message []byte) [32]byte { // If key > blockSize, hash it. var k [blockSize]byte if len(key) > blockSize { h := schnorr.SHA256Sum(key) copy(k[:], h) } else { copy(k[:], key) } var ipad, opad [blockSize]byte for i := 0; i < blockSize; i++ { ipad[i] = k[i] ^ 0x36 opad[i] = k[i] ^ 0x5c } // inner = SHA256(ipad || message) inner := []byte{:blockSize+len(message)} copy(inner, ipad[:]) copy(inner[blockSize:], message) innerHash := schnorr.SHA256Sum(inner) // outer = SHA256(opad || inner_hash) outer := []byte{:blockSize+32} copy(outer[:blockSize], opad[:]) copy(outer[blockSize:], innerHash) result := schnorr.SHA256Sum(outer) var out [32]byte copy(out[:], result) return out }