1e1a6dc91SRichard W.M. Jones /* 2e1a6dc91SRichard W.M. Jones * QEMU crypto TLS Pre-Shared Key (PSK) support 3e1a6dc91SRichard W.M. Jones * 4e1a6dc91SRichard W.M. Jones * Copyright (c) 2018 Red Hat, Inc. 5e1a6dc91SRichard W.M. Jones * 6e1a6dc91SRichard W.M. Jones * This library is free software; you can redistribute it and/or 7e1a6dc91SRichard W.M. Jones * modify it under the terms of the GNU Lesser General Public 8e1a6dc91SRichard W.M. Jones * License as published by the Free Software Foundation; either 9b7cbb874SThomas Huth * version 2.1 of the License, or (at your option) any later version. 10e1a6dc91SRichard W.M. Jones * 11e1a6dc91SRichard W.M. Jones * This library is distributed in the hope that it will be useful, 12e1a6dc91SRichard W.M. Jones * but WITHOUT ANY WARRANTY; without even the implied warranty of 13e1a6dc91SRichard W.M. Jones * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14e1a6dc91SRichard W.M. Jones * Lesser General Public License for more details. 15e1a6dc91SRichard W.M. Jones * 16e1a6dc91SRichard W.M. Jones * You should have received a copy of the GNU Lesser General Public 17e1a6dc91SRichard W.M. Jones * License along with this library; if not, see <http://www.gnu.org/licenses/>. 18e1a6dc91SRichard W.M. Jones * 19e1a6dc91SRichard W.M. Jones */ 20e1a6dc91SRichard W.M. Jones 21e1a6dc91SRichard W.M. Jones #ifndef QCRYPTO_TLSCREDSPSK_H 22e1a6dc91SRichard W.M. Jones #define QCRYPTO_TLSCREDSPSK_H 23e1a6dc91SRichard W.M. Jones 24e1a6dc91SRichard W.M. Jones #include "crypto/tlscreds.h" 25db1015e9SEduardo Habkost #include "qom/object.h" 26e1a6dc91SRichard W.M. Jones 27e1a6dc91SRichard W.M. Jones #define TYPE_QCRYPTO_TLS_CREDS_PSK "tls-creds-psk" 28db1015e9SEduardo Habkost typedef struct QCryptoTLSCredsPSK QCryptoTLSCredsPSK; 29*8110fa1dSEduardo Habkost DECLARE_INSTANCE_CHECKER(QCryptoTLSCredsPSK, QCRYPTO_TLS_CREDS_PSK, 30*8110fa1dSEduardo Habkost TYPE_QCRYPTO_TLS_CREDS_PSK) 31e1a6dc91SRichard W.M. Jones 32e1a6dc91SRichard W.M. Jones typedef struct QCryptoTLSCredsPSKClass QCryptoTLSCredsPSKClass; 33e1a6dc91SRichard W.M. Jones 34e1a6dc91SRichard W.M. Jones #define QCRYPTO_TLS_CREDS_PSKFILE "keys.psk" 35e1a6dc91SRichard W.M. Jones 36e1a6dc91SRichard W.M. Jones /** 37e1a6dc91SRichard W.M. Jones * QCryptoTLSCredsPSK: 38e1a6dc91SRichard W.M. Jones * 39e1a6dc91SRichard W.M. Jones * The QCryptoTLSCredsPSK object provides a representation 40e1a6dc91SRichard W.M. Jones * of the Pre-Shared Key credential used to perform a TLS handshake. 41e1a6dc91SRichard W.M. Jones * 42e1a6dc91SRichard W.M. Jones * This is a user creatable object, which can be instantiated 43e1a6dc91SRichard W.M. Jones * via object_new_propv(): 44e1a6dc91SRichard W.M. Jones * 45e1a6dc91SRichard W.M. Jones * <example> 46e1a6dc91SRichard W.M. Jones * <title>Creating TLS-PSK credential objects in code</title> 47e1a6dc91SRichard W.M. Jones * <programlisting> 48e1a6dc91SRichard W.M. Jones * Object *obj; 49e1a6dc91SRichard W.M. Jones * Error *err = NULL; 50e1a6dc91SRichard W.M. Jones * obj = object_new_propv(TYPE_QCRYPTO_TLS_CREDS_PSK, 51e1a6dc91SRichard W.M. Jones * "tlscreds0", 52e1a6dc91SRichard W.M. Jones * &err, 53e1a6dc91SRichard W.M. Jones * "dir", "/path/to/dir", 54e1a6dc91SRichard W.M. Jones * "endpoint", "client", 55e1a6dc91SRichard W.M. Jones * NULL); 56e1a6dc91SRichard W.M. Jones * </programlisting> 57e1a6dc91SRichard W.M. Jones * </example> 58e1a6dc91SRichard W.M. Jones * 59e1a6dc91SRichard W.M. Jones * Or via QMP: 60e1a6dc91SRichard W.M. Jones * 61e1a6dc91SRichard W.M. Jones * <example> 62e1a6dc91SRichard W.M. Jones * <title>Creating TLS-PSK credential objects via QMP</title> 63e1a6dc91SRichard W.M. Jones * <programlisting> 64e1a6dc91SRichard W.M. Jones * { 65e1a6dc91SRichard W.M. Jones * "execute": "object-add", "arguments": { 66e1a6dc91SRichard W.M. Jones * "id": "tlscreds0", 67e1a6dc91SRichard W.M. Jones * "qom-type": "tls-creds-psk", 68e1a6dc91SRichard W.M. Jones * "props": { 69e1a6dc91SRichard W.M. Jones * "dir": "/path/to/dir", 70e1a6dc91SRichard W.M. Jones * "endpoint": "client" 71e1a6dc91SRichard W.M. Jones * } 72e1a6dc91SRichard W.M. Jones * } 73e1a6dc91SRichard W.M. Jones * } 74e1a6dc91SRichard W.M. Jones * </programlisting> 75e1a6dc91SRichard W.M. Jones * </example> 76e1a6dc91SRichard W.M. Jones * 77e1a6dc91SRichard W.M. Jones * Or via the CLI: 78e1a6dc91SRichard W.M. Jones * 79e1a6dc91SRichard W.M. Jones * <example> 80e1a6dc91SRichard W.M. Jones * <title>Creating TLS-PSK credential objects via CLI</title> 81e1a6dc91SRichard W.M. Jones * <programlisting> 82e1a6dc91SRichard W.M. Jones * qemu-system-x86_64 --object tls-creds-psk,id=tlscreds0,\ 83e1a6dc91SRichard W.M. Jones * endpoint=client,dir=/path/to/dir[,username=qemu] 84e1a6dc91SRichard W.M. Jones * </programlisting> 85e1a6dc91SRichard W.M. Jones * </example> 86e1a6dc91SRichard W.M. Jones * 87e1a6dc91SRichard W.M. Jones * The PSK file can be created and managed using psktool. 88e1a6dc91SRichard W.M. Jones */ 89e1a6dc91SRichard W.M. Jones 90e1a6dc91SRichard W.M. Jones struct QCryptoTLSCredsPSKClass { 91e1a6dc91SRichard W.M. Jones QCryptoTLSCredsClass parent_class; 92e1a6dc91SRichard W.M. Jones }; 93e1a6dc91SRichard W.M. Jones 94e1a6dc91SRichard W.M. Jones 95e1a6dc91SRichard W.M. Jones #endif /* QCRYPTO_TLSCREDSPSK_H */ 96