func prefix(b []byte) []byte { sha256 := sha256.New() sha256.Write(b) h := sha256.Sum(nil) sha256.Reset() sha256.Write(h) cs := sha256.Sum(nil) return cs[:4] }
func IdForKey(pk rsa.PublicKey) Id { // Write the Rsa64 representation of public key into Sha256 pk64 := []byte(rsa64.PubToBase64(&pk)) sha256 := sha256.New() for { n, err := sha256.Write(pk64) if err != nil { panic("sha256 malfunction") } if n == len(pk64) { break } pk64 = pk64[n:] } // Compute and fold the Sha256 hash h := sha256.Sum() if len(h) != 32 { panic("expecting 32 bytes") } for i := 1; i < 4; i++ { for j := 0; j < 8; j++ { h[j] ^= h[8*i+j] } } id64, err := bytes.BytesToInt64(h[0:8]) if err != nil { panic("logic") } return Id(id64) }
func main() { fmt.Println("Start...") // String from: // http://en.wikipedia.org/wiki/WebSocket s := "x3JJHMbDL1EzLkh9GBhXDw==258EAFA5-E914-47DA-95CA-C5AB0DC85B11" // sha1 stuff ... sha1 := sha1.New() sha1.Write([]byte(s)) ss := fmt.Sprintf("%x", sha1.Sum(nil)) fmt.Printf("%s\n", ss) w := "1d29ab734b0c9585240069a6e4e3e91b61da1969" fmt.Printf("%s\n", w) if ss != w { panic("Uh oh, something is not right") } // --------------------------------------------------------------------------- // The base64 encoding part of that post is left as an exercise for now. // From the article the base64 result should be: // HSmrc0sMlYUkAGmm5OPpG2HaGWk= // *not tested* // --------------------------------------------------------------------------- // sha256 stuff ... sha256 := sha256.New() sha256.Write([]byte(s)) ss = fmt.Sprintf("%x", sha256.Sum(nil)) fmt.Printf("%s\n", ss) fmt.Println("End...") }
/* params: HTTP Verb Content-Encoding Content-Language Content-Length Content-MD5 Content-Type Date If-Modified-Since If-Match If-None-Match If-Unmodified-Since Range */ func (core Core) signature() string { signature := fmt.Sprintf("%s\n\n\n%s\n\n%s\n\n\n\n\n\n\n%s\n%s", strings.ToUpper(core.AzureRequest.Method), core.contentLength(), core.AzureRequest.Request.Header.Get("Content-Type"), core.canonicalizedHeaders(), core.canonicalizedResource()) decodedKey, _ := base64.StdEncoding.DecodeString(core.Credentials.AccessKey) sha256 := hmac.New(sha256.New, []byte(decodedKey)) sha256.Write([]byte(signature)) return base64.StdEncoding.EncodeToString(sha256.Sum(nil)) }