(key []byte, counter uint64, digits int)
| 329 | } |
| 330 | |
| 331 | func hotp(key []byte, counter uint64, digits int) int { |
| 332 | h := hmac.New(sha1.New, key) |
| 333 | binary.Write(h, binary.BigEndian, counter) |
| 334 | sum := h.Sum(nil) |
| 335 | v := binary.BigEndian.Uint32(sum[sum[len(sum)-1]&0x0F:]) & 0x7FFFFFFF |
| 336 | d := uint32(1) |
| 337 | for i := 0; i < digits && i < 8; i++ { |
| 338 | d *= 10 |
| 339 | } |
| 340 | return int(v % d) |
| 341 | } |
| 342 | |
| 343 | func totp(key []byte, t time.Time, digits int) int { |
| 344 | return hotp(key, uint64(t.UnixNano())/30e9, digits) |