Move mpw_identicon into mpw-algorithm.h & define colors.
This commit is contained in:
parent
138be9d14c
commit
c0107fb90e
@ -187,3 +187,40 @@ const char *mpw_siteState(
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MPIdenticon mpw_identicon(const char *fullName, const char *masterPassword) {
|
||||||
|
|
||||||
|
const char *leftArm[] = { "╔", "╚", "╰", "═" };
|
||||||
|
const char *rightArm[] = { "╗", "╝", "╯", "═" };
|
||||||
|
const char *body[] = { "█", "░", "▒", "▓", "☺", "☻" };
|
||||||
|
const char *accessory[] = {
|
||||||
|
"◈", "◎", "◐", "◑", "◒", "◓", "☀", "☁", "☂", "☃", "", "★", "☆", "☎", "☏", "⎈", "⌂", "☘", "☢", "☣",
|
||||||
|
"☕", "⌚", "⌛", "⏰", "⚡", "⛄", "⛅", "☔", "♔", "♕", "♖", "♗", "♘", "♙", "♚", "♛", "♜", "♝", "♞", "♟",
|
||||||
|
"♨", "♩", "♪", "♫", "⚐", "⚑", "⚔", "⚖", "⚙", "⚠", "⌘", "⏎", "✄", "✆", "✈", "✉", "✌"
|
||||||
|
};
|
||||||
|
|
||||||
|
const uint8_t *identiconSeed = NULL;
|
||||||
|
if (fullName && strlen( fullName ) && masterPassword && strlen( masterPassword ))
|
||||||
|
identiconSeed = mpw_hash_hmac_sha256(
|
||||||
|
(const uint8_t *)masterPassword, strlen( masterPassword ),
|
||||||
|
(const uint8_t *)fullName, strlen( fullName ) );
|
||||||
|
if (!identiconSeed)
|
||||||
|
return (MPIdenticon){
|
||||||
|
.leftArm = "",
|
||||||
|
.body = "",
|
||||||
|
.rightArm = "",
|
||||||
|
.accessory = "",
|
||||||
|
.color=0,
|
||||||
|
};
|
||||||
|
|
||||||
|
MPIdenticon identicon = {
|
||||||
|
.leftArm = leftArm[identiconSeed[0] % (sizeof( leftArm ) / sizeof( leftArm[0] ))],
|
||||||
|
.body = body[identiconSeed[1] % (sizeof( body ) / sizeof( body[0] ))],
|
||||||
|
.rightArm = rightArm[identiconSeed[2] % (sizeof( rightArm ) / sizeof( rightArm[0] ))],
|
||||||
|
.accessory = accessory[identiconSeed[3] % (sizeof( accessory ) / sizeof( accessory[0] ))],
|
||||||
|
.color = (uint8_t)(identiconSeed[4] % (MPIdenticonColorLast - MPIdenticonColorFirst + 1) + MPIdenticonColorFirst),
|
||||||
|
};
|
||||||
|
mpw_free( &identiconSeed, 32 );
|
||||||
|
|
||||||
|
return identicon;
|
||||||
|
}
|
||||||
|
@ -66,4 +66,7 @@ const char *mpw_siteState(
|
|||||||
const MPResultType resultType, const char *resultParam,
|
const MPResultType resultType, const char *resultParam,
|
||||||
const MPAlgorithmVersion algorithmVersion);
|
const MPAlgorithmVersion algorithmVersion);
|
||||||
|
|
||||||
|
/** @return A fingerprint for a user. */
|
||||||
|
MPIdenticon mpw_identicon(const char *fullName, const char *masterPassword);
|
||||||
|
|
||||||
#endif // _MPW_ALGORITHM_H
|
#endif // _MPW_ALGORITHM_H
|
||||||
|
@ -262,40 +262,3 @@ const char mpw_characterFromClass(char characterClass, uint8_t seedByte) {
|
|||||||
|
|
||||||
return classCharacters[seedByte % strlen( classCharacters )];
|
return classCharacters[seedByte % strlen( classCharacters )];
|
||||||
}
|
}
|
||||||
|
|
||||||
MPIdenticon mpw_identicon(const char *fullName, const char *masterPassword) {
|
|
||||||
|
|
||||||
const char *leftArm[] = { "╔", "╚", "╰", "═" };
|
|
||||||
const char *rightArm[] = { "╗", "╝", "╯", "═" };
|
|
||||||
const char *body[] = { "█", "░", "▒", "▓", "☺", "☻" };
|
|
||||||
const char *accessory[] = {
|
|
||||||
"◈", "◎", "◐", "◑", "◒", "◓", "☀", "☁", "☂", "☃", "", "★", "☆", "☎", "☏", "⎈", "⌂", "☘", "☢", "☣",
|
|
||||||
"☕", "⌚", "⌛", "⏰", "⚡", "⛄", "⛅", "☔", "♔", "♕", "♖", "♗", "♘", "♙", "♚", "♛", "♜", "♝", "♞", "♟",
|
|
||||||
"♨", "♩", "♪", "♫", "⚐", "⚑", "⚔", "⚖", "⚙", "⚠", "⌘", "⏎", "✄", "✆", "✈", "✉", "✌"
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t *identiconSeed = NULL;
|
|
||||||
if (fullName && strlen( fullName ) && masterPassword && strlen( masterPassword ))
|
|
||||||
identiconSeed = mpw_hash_hmac_sha256(
|
|
||||||
(const uint8_t *)masterPassword, strlen( masterPassword ),
|
|
||||||
(const uint8_t *)fullName, strlen( fullName ) );
|
|
||||||
if (!identiconSeed)
|
|
||||||
return (MPIdenticon){
|
|
||||||
.leftArm = "",
|
|
||||||
.body = "",
|
|
||||||
.rightArm = "",
|
|
||||||
.accessory = "",
|
|
||||||
.color=0,
|
|
||||||
};
|
|
||||||
|
|
||||||
MPIdenticon identicon = {
|
|
||||||
.leftArm = leftArm[identiconSeed[0] % (sizeof( leftArm ) / sizeof( leftArm[0] ))],
|
|
||||||
.body = body[identiconSeed[1] % (sizeof( body ) / sizeof( body[0] ))],
|
|
||||||
.rightArm = rightArm[identiconSeed[2] % (sizeof( rightArm ) / sizeof( rightArm[0] ))],
|
|
||||||
.accessory = accessory[identiconSeed[3] % (sizeof( accessory ) / sizeof( accessory[0] ))],
|
|
||||||
.color = (uint8_t)(identiconSeed[4] % 7 + 1),
|
|
||||||
};
|
|
||||||
mpw_free( &identiconSeed, 32 );
|
|
||||||
|
|
||||||
return identicon;
|
|
||||||
}
|
|
||||||
|
@ -111,12 +111,26 @@ typedef mpw_enum ( uint32_t, MPCounterValue ) {
|
|||||||
MPCounterValueLast = UINT32_MAX,
|
MPCounterValueLast = UINT32_MAX,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/** These colours are compatible with the original ANSI SGR. */
|
||||||
|
typedef mpw_enum( uint8_t, MPIdenticonColor ) {
|
||||||
|
MPIdenticonColorRed = 1,
|
||||||
|
MPIdenticonColorGreen,
|
||||||
|
MPIdenticonColorYellow,
|
||||||
|
MPIdenticonColorBlue,
|
||||||
|
MPIdenticonColorMagenta,
|
||||||
|
MPIdenticonColorCyan,
|
||||||
|
MPIdenticonColorWhite,
|
||||||
|
|
||||||
|
MPIdenticonColorFirst = MPIdenticonColorRed,
|
||||||
|
MPIdenticonColorLast = MPIdenticonColorWhite,
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
const char *leftArm;
|
const char *leftArm;
|
||||||
const char *body;
|
const char *body;
|
||||||
const char *rightArm;
|
const char *rightArm;
|
||||||
const char *accessory;
|
const char *accessory;
|
||||||
uint8_t color;
|
MPIdenticonColor color;
|
||||||
} MPIdenticon;
|
} MPIdenticon;
|
||||||
|
|
||||||
//// Type utilities.
|
//// Type utilities.
|
||||||
@ -165,7 +179,4 @@ const char *mpw_charactersInClass(char characterClass);
|
|||||||
*/
|
*/
|
||||||
const char mpw_characterFromClass(char characterClass, uint8_t seedByte);
|
const char mpw_characterFromClass(char characterClass, uint8_t seedByte);
|
||||||
|
|
||||||
/** @return A fingerprint for a user. */
|
|
||||||
MPIdenticon mpw_identicon(const char *fullName, const char *masterPassword);
|
|
||||||
|
|
||||||
#endif // _MPW_TYPES_H
|
#endif // _MPW_TYPES_H
|
||||||
|
Loading…
Reference in New Issue
Block a user