Here’s my code, have been banging my head against a wall for a few days:
r, err := http.NewRequest("POST", "https://c.im/users/matthewp/inbox", bytes.NewReader(b))
if err != nil {
return "", err
}
r.Header.Set("Content-Type", `application/ld+json; profile="http://www.w3.org/ns/activitystreams"`)
r.Header.Add("Accept-Charset", "utf-8")
r.Header.Add("User-Agent", "example")
r.Header.Set("Host", "c.im")
prefs := []httpsig.Algorithm{httpsig.RSA_SHA256}
digestAlgorithm := httpsig.DigestSha256
headersToSign := []string{httpsig.RequestTarget, "host", "date", "digest"}
signer, _, err := httpsig.NewSigner(prefs, digestAlgorithm, headersToSign, httpsig.Signature, 120)
if err != nil {
return "", err
}
now := time.Now().UTC()
r.Header.Set("Date", now.Format(http.TimeFormat))
priv, err := ssh.ParseRawPrivateKey(PrivateKeyBytes)
if err != nil {
return "", err
}
err = signer.SignRequest(priv, "https://social.spooky.click/users/matthew#main-key", r, b)
if err != nil {
return "", err
}
client := &http.Client{}
fmt.Printf("Headers: %+v\n", r.Header)
resp, err := client.Do(r)