Код приведен в документации
Код: Выделить всё
import base64
from cryptography.hazmat.primitives.asymmetric.ed25519 import Ed25519PrivateKey
from cryptography.hazmat.primitives.serialization import load_pem_private_key
def logon_raw_data(private_key: Ed25519PrivateKey,
sender_comp_id: str,
target_comp_id: str,
msg_seq_num: str,
sending_time: str):
"""
Computes the value of RawData (96) field in Logon message.
"""
payload = chr(1).join([
'A',
sender_comp_id,
target_comp_id,
msg_seq_num,
sending_time,
])
signature = private_key.sign(payload.encode('ASCII'))
return base64.b64encode(signature).decode('ASCII')
with open('private_key.pem', 'rb') as f:
private_key = load_pem_private_key(data=f.read(),
password=None)
raw_data = logon_raw_data(private_key,
sender_comp_id='5JQmUOsm',
target_comp_id='SPOT',
msg_seq_num='1',
sending_time='20240612-08:52:21.613')
Хотя для создания подписи требуется ввод временной метки, эта ошибка не связана с задержкой во времени копирования подписи. , компиляция и запуск программы на C++. Отправка сообщения FIX через слишком долгое время после создания созданной метки времени приведет к следующей ошибке: Отметка времени для этого запроса находится за пределами RecvWindow.
Это проблема, специфичная для c++, или это исправит реализация алгоритма хеширования в c++?
Код: Выделить всё
void Application::toAdmin(FIX::Message &message, const FIX::SessionID &sessionID)
EXCEPT(FIX::DoNotSend) {
if (FIX::MsgType_Logon == message.getHeader().getField(FIX::FIELD::MsgType)) {
std::string rawData = "CkY08Cf3xrN4MwAdl/Kblj2aHrGxT2sS1URZ/VM0mksR1tQd6hHQ5bda0oNSIeD/JI9cwPBJ4y2R2ZcVgy7oDQ==";
message.setField(FIX::RawDataLength(88));
message.setField(FIX::RawData(rawData));
message.setField(FIX::Username("myapikey"));
message.setField(FIX::StringField(25035, "1"));
}
}
Отправлено сообщение: (8=FIX.4.4|9=248|35=A|34=1|49=sendercompid|52=20250102-15:38:55.546|56=SPOT|95=88|96=CkY08Cf3xrN4MwAdl/Kblj2aHrGx T2sS1URZ/VM0mksR1tQd6hHQ5bda0oNSIED/JI9cwPBJ4y2R2ZcVgy7oDQ==|98=0|108=30|141=Y|553=apikey|25035=1|10=149|)
Ответ: (8=FIX.4.4|9=0000131|35=3|49=SPOT|56=ryantest|34=1|52=20250102-15:38:55.774913|45=1|372= A|373=8|25016=-1022|58=Подпись для этого запроса отсутствует допустимо.|10=238|
Подробнее здесь: https://stackoverflow.com/questions/793 ... ignature-w
Мобильная версия