/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "nsISupports.idl" interface nsIInputStream; %{C++ #include "mozilla/AlreadyAddRefed.h" %} /** * nsICryptoHash * This interface provides crytographic hashing algorithms. */ [builtinclass, scriptable, uuid(1e5b7c43-4688-45ce-92e1-77ed931e3bbe)] interface nsICryptoHash : nsISupports { /** * Hashing Algorithms. These values are to be used by the * |init| method to indicate which hashing function to * use. These values must be identical to the values defined * in security/nss/lib/util/hasht.h in type HASH_HashType. * This allows us to use NSS mapping functions like * HASH_GetHashOidTagByHashType with these values. */ const short MD5 = 2; /* String value: "md5" */ const short SHA1 = 3; /* String value: "sha1" */ const short SHA256 = 4; /* String value: "sha256" */ const short SHA384 = 5; /* String value: "sha384" */ const short SHA512 = 6; /* String value: "sha512" */ /** * Initialize the hashing object. This method may be * called multiple times with different algorithm types. * * @param aAlgorithm the algorithm type to be used. * This value must be one of the above valid * algorithm types. * * @throws NS_ERROR_INVALID_ARG if an unsupported algorithm * type is passed. * * NOTE: This method or initWithString must be called * before any other method on this interface is called. */ void init(in unsigned long aAlgorithm); /** * Initialize the hashing object. This method may be * called multiple times with different algorithm types. * * @param aAlgorithm the algorithm type to be used. * * @throws NS_ERROR_INVALID_ARG if an unsupported algorithm * type is passed. * * NOTE: This method or init must be called before any * other method on this interface is called. */ [must_use] void initWithString(in ACString aAlgorithm); /** * @param aData a buffer to calculate the hash over * * @param aLen the length of the buffer |aData| * * @throws NS_ERROR_NOT_INITIALIZED If |init| has not been called. */ void update([const, array, size_is(aLen)] in octet aData, in unsigned long aLen); /** * Calculates and updates a new hash based on a given data stream. * * @param aStream an input stream to read from. * * @param aLen How much to read from the given |aStream|. Passing UINT32_MAX * indicates that all data available will be used to update the hash. * * @throws NS_ERROR_NOT_INITIALIZED If |init| has not been called. * * @throws NS_ERROR_NOT_AVAILABLE If the requested amount of * data to be calculated into the hash is not available. * */ [must_use] void updateFromStream(in nsIInputStream aStream, in unsigned long aLen); /** * Completes this hash object and produces the actual hash data. * * @param aASCII If true then the returned value is a base64 encoded string. * If false, then the returned value is binary data. * * @return a hash of the data that was read by this object. This can * be either binary data or base 64 encoded. * * @throws NS_ERROR_NOT_INITIALIZED If |init| has not been called. * * NOTE: This method may be called any time after |init| * is called. This call resets the object to its * pre-init state. */ ACString finish(in boolean aASCII); }; %{C++ already_AddRefed NS_NewCryptoHash(); nsresult NS_NewCryptoHash(uint32_t aHashType, nsICryptoHash** aOutHasher); nsresult NS_NewCryptoHash(const nsACString& aHashType, nsICryptoHash** aOutHasher); %}