@@ -15,6 +15,8 @@ static const uint8_t APTOS_RAW_TX_PREFIX[32] = {
1515 54 , 67 , 169 , 188 , 111 , 102 , 147 , 189 , 220 , 26 , 159 ,
1616 236 , 158 , 103 , 74 , 70 , 30 , 170 , 0 , 177 , 147 };
1717
18+ static const char * MESSAGE_PREFIX = "APTOS\n" ;
19+
1820void aptos_get_address_from_public_key (const uint8_t * public_key ,
1921 char * address ) {
2022 uint8_t buf [SIZE_PUBKEY ] = {0 };
@@ -52,3 +54,56 @@ void aptos_sign_tx(const AptosSignTx *msg, const HDNode *node,
5254 resp -> public_key .size = 32 ;
5355 msg_write (MessageType_MessageType_AptosSignedTx , resp );
5456}
57+
58+ void aptos_sign_message (const AptosSignMessage * msg , const HDNode * node ,
59+ AptosMessageSignature * resp ) {
60+ AptosMessagePayload payload = msg -> payload ;
61+ char full_message [sizeof (AptosMessagePayload ) + 58 ] = {0 };
62+
63+ strcat (full_message , MESSAGE_PREFIX );
64+ if (payload .has_address ) {
65+ char * address = payload .address ;
66+ strcat (full_message , "address: " );
67+ strcat (full_message , address );
68+ strcat (full_message , "\n" );
69+ }
70+ if (payload .has_application ) {
71+ char * application = payload .application ;
72+ strcat (full_message , "application: " );
73+ strcat (full_message , application );
74+ strcat (full_message , "\n" );
75+ }
76+ if (payload .has_chain_id ) {
77+ char * chain_id = payload .chain_id ;
78+ strcat (full_message , "chainId: " );
79+ strcat (full_message , chain_id );
80+ strcat (full_message , "\n" );
81+ }
82+ char * message = payload .message ;
83+ strcat (full_message , "message: " );
84+ strcat (full_message , message );
85+ strcat (full_message , "\n" );
86+ char * nonce = payload .nonce ;
87+ strcat (full_message , "nonce: " );
88+ strcat (full_message , nonce );
89+
90+ aptos_get_address_from_public_key (node -> public_key + 1 , resp -> address );
91+ // display here
92+ layoutVerifyAddress (NULL , resp -> address );
93+ if (!protectButton (ButtonRequestType_ButtonRequest_Other , false)) {
94+ fsm_sendFailure (FailureType_Failure_ActionCancelled , NULL );
95+ layoutHome ();
96+ return ;
97+ }
98+ if (!fsm_layoutSignMessage ((const uint8_t * )full_message ,
99+ strlen (full_message ))) {
100+ fsm_sendFailure (FailureType_Failure_ActionCancelled , NULL );
101+ layoutHome ();
102+ return ;
103+ }
104+ ed25519_sign ((const uint8_t * )full_message , strlen (full_message ),
105+ node -> private_key , node -> public_key + 1 , resp -> signature .bytes );
106+
107+ resp -> signature .size = 64 ;
108+ msg_write (MessageType_MessageType_AptosMessageSignature , resp );
109+ }
0 commit comments