1 /** 2 * Orthanc - A Lightweight, RESTful DICOM Store 3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics 4 * Department, University Hospital of Liege, Belgium 5 * Copyright (C) 2017-2021 Osimis S.A., Belgium 6 * 7 * This program is free software: you can redistribute it and/or 8 * modify it under the terms of the GNU Lesser General Public License 9 * as published by the Free Software Foundation, either version 3 of 10 * the License, or (at your option) any later version. 11 * 12 * This program is distributed in the hope that it will be useful, but 13 * WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 15 * Lesser General Public License for more details. 16 * 17 * You should have received a copy of the GNU Lesser General Public 18 * License along with this program. If not, see 19 * <http://www.gnu.org/licenses/>. 20 **/ 21 22 23 #pragma once 24 25 #include "DicomMap.h" 26 27 namespace Orthanc 28 { 29 /** 30 * This class implements the hashing mechanism that is used to 31 * convert DICOM unique identifiers to Orthanc identifiers. Any 32 * Orthanc identifier for a DICOM resource corresponds to the SHA-1 33 * hash of the DICOM identifiers. 34 35 * \note SHA-1 hash is used because it is less sensitive to 36 * collision attacks than MD5. <a 37 * href="http://en.wikipedia.org/wiki/SHA-256#Comparison_of_SHA_functions">[Reference]</a> 38 **/ 39 class ORTHANC_PUBLIC DicomInstanceHasher 40 { 41 private: 42 std::string patientId_; 43 std::string studyUid_; 44 std::string seriesUid_; 45 std::string instanceUid_; 46 47 std::string patientHash_; 48 std::string studyHash_; 49 std::string seriesHash_; 50 std::string instanceHash_; 51 52 void Setup(const std::string& patientId, 53 const std::string& studyUid, 54 const std::string& seriesUid, 55 const std::string& instanceUid); 56 57 public: 58 explicit DicomInstanceHasher(const DicomMap& instance); 59 60 DicomInstanceHasher(const std::string& patientId, 61 const std::string& studyUid, 62 const std::string& seriesUid, 63 const std::string& instanceUid); 64 65 const std::string& GetPatientId() const; 66 67 const std::string& GetStudyUid() const; 68 69 const std::string& GetSeriesUid() const; 70 71 const std::string& GetInstanceUid() const; 72 73 const std::string& HashPatient(); 74 75 const std::string& HashStudy(); 76 77 const std::string& HashSeries(); 78 79 const std::string& HashInstance(); 80 }; 81 } 82