47 lines
1.2 KiB
Swift

//
// HMAC.swift
// OAuthSwift
//
// Created by Dongri Jin on 1/28/15.
// Copyright (c) 2015 Dongri Jin. All rights reserved.
//
import Foundation
public class HMAC {
let key:[UInt8] = []
class internal func sha1(key key: NSData, message: NSData) -> NSData? {
var key = key.bytes()
let message = message.bytes()
// key
if (key.count > 64) {
key = SHA1(NSData.withBytes(key)).calculate().bytes()
}
if (key.count < 64) {
key = key + [UInt8](count: 64 - key.count, repeatedValue: 0)
}
//
var opad = [UInt8](count: 64, repeatedValue: 0x5c)
for (idx, _) in key.enumerate() {
opad[idx] = key[idx] ^ opad[idx]
}
var ipad = [UInt8](count: 64, repeatedValue: 0x36)
for (idx, _) in key.enumerate() {
ipad[idx] = key[idx] ^ ipad[idx]
}
let ipadAndMessageHash = SHA1(NSData.withBytes(ipad + message)).calculate().bytes()
let finalHash = SHA1(NSData.withBytes(opad + ipadAndMessageHash)).calculate().bytes()
let mac = finalHash
return NSData(bytes: mac, length: mac.count)
}
}