 //    The host will abort if it detects that A == 0 (mod N).
 //    The user must show his proof of K first. If the server detects that the user's proof is incorrect, it must abort without showing its own proof of K.
 
+
 public protocol SRPProtocol
 {
     /// Compute the verifier and client credentials.

public typealias HMacFunc = (Data, Data) -> Data
public typealias BigUIntPrivateValueFunc = (BigUInt) -> BigUInt

/// Implementation of the SRP protocol. Although it's primarily intended to be used on the client side, it includes the server side methods
/// as well (for testing purposes).
public struct SRPImpl: SRPProtocol

    }
    
    /// SHA256 hash function
    public static let sha256DigestFunc: DigestFunc = CryptoAlgorithm.SHA256.digestFunc()
    
    /// SHA512 hash function
    public static let sha512DigestFunc: DigestFunc = CryptoAlgorithm.SHA512.digestFunc()
    
    /// SHA256 hash function
    public static let sha256HMacFunc: HMacFunc = CryptoAlgorithm.SHA256.hmacFunc()
    
    /// SHA512 hash function
    public static let sha512HMacFunc: HMacFunc = CryptoAlgorithm.SHA512.hmacFunc()
    
    /// Generate a random private value less than the given value N and at least half the bit size of N
    ///
