--- /dev/null
+/*!
+ @function SecBreadcrumbCreateFromPassword
+ @abstract Encryptes the password using a random key and then returns
+ the encrypted password (breadcrumb) and the password encrypted random key.
+
+ @param inPassword is the password to encrypt and use to encrypt the random key.
+ @param outBreadcrumb is the password encrypted using a random key.
+ @param outEncryptedKey is the random key encrypted using inPassword.
+ @param error An optional pointer to a CFErrorRef. This value is set
+ if an error occurred. If not NULL, the caller is responsible for
+ releasing the CFErrorRef.
+ @result On return a Boolean indicating success or failure.
+
+ @discussion This function generates the breadcrumb that will be used to
+ update the user's keychain password when their Apple ID Login password
+ is changed on appleid.apple.com.
+*/
+
+Boolean
+SecBreadcrumbCreateFromPassword(CFStringRef inPassword,
+ CFDataRef *outBreadcrumb,
+ CFDataRef *outEncryptedKey,
+ CFErrorRef *outError);
+
+
+/*!
+ @function SecBreadcrumbCopyPassword
+ @abstract Decryptes the encrypted key using the password and uses the key to
+ decrypt the breadcrumb and returns the password stored in the breadcrumb.
+
+ @param inPassword is the password to decrypt the encrypted random key.
+ @param inBreadcrumb is the breadcrumb encrypted by the key. It contains
+ and encrypted version of the users old password.
+ @param inEcryptedKey is an encrypted version of the key used to encrypt the
+ breadcrumb.
+ @param outPassword is the cleartext password that was stored in the breadcrumb.
+ @param error An optional pointer to a CFErrorRef. This value is set
+ if an error occurred. If not NULL, the caller is responsible for
+ releasing the CFErrorRef.
+ @result On return a Boolean indicating success or failure.
+
+ @discussion This function uses the password to decrypt the encrypted key and then
+ uses that key to decrypt the breadcrumb.
+*/
+
+Boolean
+SecBreadcrumbCopyPassword(CFStringRef inPassword,
+ CFDataRef inBreadcrumb,
+ CFDataRef inEncryptedKey,
+ CFStringRef *outPassword,
+ CFErrorRef *outError);
+
+/*
+ * Change password used to encrypt the key from old password to new password
+ */
+
+CFDataRef
+SecBreadcrumbCreateNewEncryptedKey(CFStringRef oldPassword,
+ CFStringRef newPassword,
+ CFDataRef encryptedKey,
+ CFErrorRef *outError);